PDA

View Full Version : سوال: خطای بسته شدن فرم پس از طی زمانی خاص



aminaltavista
جمعه 10 شهریور 1391, 20:19 عصر
سلام

من این کد رو تو رویداد لود فرمی که میخوام بعد از چند ثانیه بسته بشه قرار میدم:


private void Loading_Load(object sender, EventArgs e)
{
aTime = new System.Timers.Timer(10000);
aTime.Elapsed += new ElapsedEventHandler(aTime_Elapsed);
aTime.Enabled = true;
aTime.Interval = 3000;
}
private void aTime_Elapsed(object sender, ElapsedEventArgs e)
{
aTime.Stop();
login.ShowDialog();
this.Close();

}

atimer که از جنس تایمر هست و login که به فرم دوم اشاره میکنه رو در کلاس فرم الانشون کردم.

فقط خطا زمانی رخ میده که بخوام فرم close بشه . با یه دستکاری تونستم فرم دوم رو پس از چند ثانیه نشون بدم اما فرم یک هنوز باز بود و هر کاری میکردم بسته نمیشد. مشکل کار کجاست!:گیج:

مسعود اقدسی فام
جمعه 10 شهریور 1391, 20:34 عصر
سلام

من این کد رو تو رویداد لود فرمی که میخوام بعد از چند ثانیه بسته بشه قرار میدم:


private void Loading_Load(object sender, EventArgs e)
{
aTime = new System.Timers.Timer(10000);
aTime.Elapsed += new ElapsedEventHandler(aTime_Elapsed);
aTime.Enabled = true;
aTime.Interval = 3000;
}
private void aTime_Elapsed(object sender, ElapsedEventArgs e)
{
aTime.Stop();
login.ShowDialog();
this.Close();

}

atimer که از جنس تایمر هست و login که به فرم دوم اشاره میکنه رو در کلاس فرم الانشون کردم.

فقط خطا زمانی رخ میده که بخوام فرم close بشه . با یه دستکاری تونستم فرم دوم رو پس از چند ثانیه نشون بدم اما فرم یک هنوز باز بود و هر کاری میکردم بسته نمیشد. مشکل کار کجاست!:گیج:

یعنی می‌خواید فرم اول یسته شه و فقط فرم لاگین باقی بمونه؟

login کجا تعریف شده؟ داخل کلاس فرم اول؟

aminaltavista
جمعه 10 شهریور 1391, 22:50 عصر
یعنی می‌خواید فرم اول یسته شه و فقط فرم لاگین باقی بمونه؟

login کجا تعریف شده؟ داخل کلاس فرم اول؟

توضیحم بد بود عذر میخوام.
ببینید! من دوتا فرم دارم که this همون فرمی هست که برای اولین بار اجرای نرم افزار ساخته میشه یا به عبارتی اولین فرم که اجرا میشه همون this یا frmLoading هست. و فرم دوم که لاگین هست بعد از سپری شدن فرم یک به نمایش درمیاد.

شاید اصلا براتون جالب باشه که چرا این کارو میکنم . در فرم یک من یک لوگو طراحی کردم که یه نماد از نرم افزارم هست و بعد از گذشت مثلا 5 ثانیه این باید hidden بشه و فرمی که کاربر را تعیین میکنه (لاگین)رو نمایش بده.

حالا که فلسفه انجام این کارو دونستید فکر کنم که یه خورده مساله براتون باز تر شده. در جواب سوالتون هم باید بگم که درسته قصد دارم که فقط فرم لاگین بمونه و لاگین که یه اینترفیس برا سویچینگ من به فرم لاگین هست داخل کلاس فرم اولی هست.

مسعود اقدسی فام
جمعه 10 شهریور 1391, 23:34 عصر
توضیحم بد بود عذر میخوام.
ببینید! من دوتا فرم دارم که this همون فرمی هست که برای اولین بار اجرای نرم افزار ساخته میشه یا به عبارتی اولین فرم که اجرا میشه همون this یا frmLoading هست. و فرم دوم که لاگین هست بعد از سپری شدن فرم یک به نمایش درمیاد.

شاید اصلا براتون جالب باشه که چرا این کارو میکنم . در فرم یک من یک لوگو طراحی کردم که یه نماد از نرم افزارم هست و بعد از گذشت مثلا 5 ثانیه این باید hidden بشه و فرمی که کاربر را تعیین میکنه (لاگین)رو نمایش بده.

حالا که فلسفه انجام این کارو دونستید فکر کنم که یه خورده مساله براتون باز تر شده. در جواب سوالتون هم باید بگم که درسته قصد دارم که فقط فرم لاگین بمونه و لاگین که یه اینترفیس برا سویچینگ من به فرم لاگین هست داخل کلاس فرم اولی هست.

ممنون از توضیح.

وقتی شی فرم لاگین رو داخل فرم اول تعریف کردید. و البته فرم لاگین رو هم ShowDialog کردید، فرم لاگین به فرم اول وابسته می‌شه. اگه فرم اول بسته شه تمام فضای اون آزاد می‌شه که در نتیجه فرم دوم و کل برنامه بسته می‌شه. مگر نه اینکه (Application.Run(form1 شده؟ پس برنامه وابسته به فرم یک می‌شه و بسته شدنش یعنی تموم شدن برنامه.
برای فرم لاگین و البته فرم لوگو روشای مختلفی وجود داره. مثلا می‌شه برنامه رو با این فرما Run کزد و اگه اوکی بود (پسورد درست) دوباره با فرم اصلی Run کرد. یعنی دو تا Application.Run دارید. البته این فقط یه راهه.


امیدوارم درست متوجه منظور و مشکلتون شده باشم.

aminaltavista
جمعه 10 شهریور 1391, 23:46 عصر
برای فرم لاگین و البته فرم لوگو روشای مختلفی وجود داره. مثلا می‌شه برنامه رو با این فرما Run کزد و اگه اوکی بود (پسورد درست) دوباره با فرم اصلی Run کرد. یعنی دو تا Application.Run دارید. البته این فقط یه راهه.


شما تا حدودی منظورم رو فهمیدید! مشکل اصلی من در حال حاظر قسمت پاراگراف اوله که شرحش دادید و خوشبختانه تو زمینه لاگین مشکلی ندارم ! اگه با یه مثال راهنمایی کنید بهتره! ببخشید که بهتون زحمت میدم. اما من ایده عملی دارم تا تئوری. و از اون چیزی که عملی هست رو بهتر برداشت میکنم.

مسعود اقدسی فام
شنبه 11 شهریور 1391, 00:21 صبح
داخل Program.cs:




FormLogin formLogin = new FormLogin();

Application.Run(formLogin);
if (formLogin.DialogResult == DialogResult.OK)
{
Application.Run(new FormMain());
}

aminaltavista
شنبه 11 شهریور 1391, 19:56 عصر
داخل Program.cs:




FormLogin formLogin = new FormLogin();

Application.Run(formLogin);
if (formLogin.DialogResult == DialogResult.OK)
{
Application.Run(new FormMain());
}





راستش باز هم مورد کارم نیست. خیلی ببخشید . الان دنبال دستوری میگردم که پس از طی زمان مثلا 5 ثانیه فرم جاری رو بسته و یک فرم دیگر باز کند.
ترسیدم باز تاپیک بزنم که به احتمال 89 درصد به دلیل تکراری حذف میشد. باز هم ازتون عذر خوهای میکنم.

NasrEsk
شنبه 11 شهریور 1391, 20:33 عصر
سلام دوست عزیز.
کلمه Splash Screen رو جستجو کن.
روشش خیلی آسونه

مسعود اقدسی فام
شنبه 11 شهریور 1391, 20:36 عصر
با همین روش با Application.run فرم اول رو باز کنید. پنج ثانیه تایمر بذارید و ببندینش. با application.Run دوم فرم دوم رو باز کنید. به هر حال از داخل فرم اول نمی‌تونید فرم دوم رو باز کنید و اولی رو ببنید. چون بسته شدن فرم والد فرم فرزند رو هم می‌بنده.