PDA

View Full Version : مشکل در بسته شدن فرم قبلی پس از باز شدن فرم جدید



ali2006sr
جمعه 20 شهریور 1388, 14:17 عصر
سلام ، من یه مشکلی در بستن فرمها و باز کردن فرم جدید دارم ، من می خوام وقتی فرم اول باز شد و بعد از ورود اطلاعات با زدن یک کلید فرم اول بسته بشه و فرم دوم باز بشه ، اما فقط فرم دوم باز میشه و تا وقتی که فرم دوم بسته نشه فرم اول هم بسته نمیشه ، باید جیکار کنم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

نمونه کد :

private void sabt2_Click(object sender, EventArgs e)
{
showm();
this.Close();
}

sara.f
جمعه 20 شهریور 1388, 14:25 عصر
سلام ، من یه مشکلی در بستن فرمها و باز کردن فرم جدید دارم ، من می خوام وقتی فرم اول باز شد و بعد از ورود اطلاعات با زدن یک کلید فرم اول بسته بشه و فرم دوم باز بشه ، اما فقط فرم دوم باز میشه و تا وقتی که فرم دوم بسته نشه فرم اول هم بسته نمیشه ، باید جیکار کنم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

نمونه کد :

private void sabt2_Click(object sender, EventArgs e)
{
showm();
this.Close();
}
سلام.
http://barnamenevis.org/forum/showthread.php?t=178314

mohsenashkboos
جمعه 20 شهریور 1388, 14:25 عصر
از این کد استفاده کن در فرم اولت.




this.Hide();
frmMain NextFrm = new frmMain();
NextFrm.ShowDialog();
this.Close();

اَرژنگ
جمعه 20 شهریور 1388, 15:49 عصر
از این کد استفاده کن در فرم اولت.



this.Hide();
frmMain NextFrm = newfrmMain();
NextFrm.ShowDialog();
this.Close();

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

mohsenashkboos
جمعه 20 شهریور 1388, 17:58 عصر
اشکال این کار این است که تا زمانیکه برنامه تمام نشه فرم اول همینطوی میشینه در حافظه.
چرا وقتی که روش بهتر وجود دارد به قایم کردن فرم متوصل بشیم؟

با تشکر از شما.برای اینکه فرم از حافظه برداشته شود میتوانید ازتابع dispose() استفاده کنید :



this.Hide();
Form2 NextFrm = newForm2();
NextFrm.ShowDialog () ;
this.Close () ;
this.Dispose();

اَرژنگ
جمعه 20 شهریور 1388, 18:14 عصر
با تشکر از شما.برای اینکه فرم از حافظه برداشته شود میتوانید ازتابع dispose() استفاده کنید :



this.Hide();
Form2 NextFrm = newForm2();
NextFrm.ShowDialog () ;
this.Close () ;
this.Dispose();


خیر!
لازم به استفاده از دیسپز نیست.
من میگم که یک فرم اضافی همینطوری تو حافظه میشینه تا موقعی که برنامه بسته شه، اگر نگاه کنید میبینید که فرم اول را نمیتوانید ببندید و با قایم کردن این مشکل را ماسمالی میکنند.
از لحاض کد نویسی کار میکنه، ولی یک برنامه نویس نمیتونه دلیل اینکه چرا یک فرم را قایم نگه داشته را بازگو کنه.
از لحاض اینکه فقط یک کلک است که در ظاهر فقط کار میکنه، در پشت پرده بر اصولی پایدار نیست.
یکی بپرسه دلیل قایم کردن فرم چیه ؟ جوابش را چه میشه داد؟

mohsenashkboos
جمعه 20 شهریور 1388, 18:34 عصر
من حرف شما را قبول دارم که میگید هیدن کردن یک کلیک اما من آنرا تا موقعی هیدن میکنم که فرم 2 باز شه و بعد از آن عملا با دستور dispose من آنرا از حافظه بر میدارم پس دیگه مشکل چیه؟؟!!

اَرژنگ
جمعه 20 شهریور 1388, 18:48 عصر
من حرف شما را قبول دارم که میگید هیدن کردن یک کلیک اما من آنرا تا موقعی هیدن میکنم که فرم 2 باز شه و بعد از آن عملا با دستور dispose من آنرا از حافظه بر میدارم پس دیگه مشکل چیه؟؟!!

خیر، تا بعد از اینکه فرم ۲ باز بشه از حافظه برنمیدارید، بعد از اینکه فرم ۲ بسته بشه از حافظه برمیدارید.

۱.چرا اصلا قایم کردنش لازمه؟
۲.چرا بعد از اینکه فرم ۲ نشان داده میشه بسته میشه؟ مگر نه اینکه منطقش این است که یک فرم نشان داده بشه و بعدش یک فرم دیگر؟ اینکه بعد از فرم دوم هنوز تو حافظه است دلیلش چیه؟
۳.چرا فرم اول تا موقعی که برنامه تمام نشده همینطوری در حافظه است؟

Vahid_moghaddam
جمعه 20 شهریور 1388, 18:55 عصر
this.Hide();
Form2 NextFrm = newForm2();
NextFrm.ShowDialog () ;
this.Close () ;
this.Dispose();


تا بسته نشدن NextFrm دستور this.close اجرا نمی شود و فرم در حافظه می ماند

newgoldenman
جمعه 20 شهریور 1388, 21:51 عصر
سلام.
یه جمله هم من بگم و رفع زحمت كنم!

اولین فرمی كه برنامه اون رو new میكنه و نمایش میده، و بصورت پیش فرض توی program.cs قرار داره، در واقع handle برنامه به حساب میاد. بنابراین هرجای برنامه كه handle رو به هر نحوی، بزنیم درب و داغونش كنیم(Close, Dispose ...) مثل این هست كه Application.Exit كرده باشیم!!

als_1360
جمعه 20 شهریور 1388, 22:17 عصر
يك روش جالب :
توي قسمت Main برنامه يك ايونت اد كن قبل از اپليكيشن.ران :
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
Application.Run(new Form1());
توي ايونت هم اين كد رو بذار :
Application.Run(new Form2());

فقط يه فكري به حال بسته شدن فرم دوم بكن چون كل برنامه رو نمي بنده من تست نكردم البته

mohsenashkboos
شنبه 21 شهریور 1388, 11:29 صبح
this.Hide();
Form2 NextFrm = newForm2();
NextFrm.ShowDialog () ;
this.Close () ;
this.Dispose();


تا بسته نشدن NextFrm دستور this.close اجرا نمی شود و فرم در حافظه می ماند
ممنون از راهنماییتون.