PDA

View Full Version : چگونگی مخفی شدن و نمایان شدن مجدد فرم



iranigirl1364
شنبه 24 آذر 1386, 07:58 صبح
با سلام:
من دو تا فرم دارم, چگونه می شه وقتی که برای مثال دکمه ای رو در Form1 کلیک می کنم و با این کلیلک Form2 باز می شه , بعد از باز شدن From2 بلافاصله Form1 بسته شود و وقتی Form2 بسته شد بلافاصله Form1 مجددا نمایش داده شود
با تشکر

sinpin
شنبه 24 آذر 1386, 08:07 صبح
با سلام:
من دو تا فرم دارم, چگونه می شه وقتی که برای مثال دکمه ای رو در Form1 کلیک می کنم و با این کلیلک Form2 باز می شه , بعد از باز شدن From2 بلافاصله Form1 بسته شود و وقتی Form2 بسته شد بلافاصله Form1 مجددا نمایش داده شود
با تشکر

کد فرم 1 :

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
frm.Tag = this;
this.Hide();
}کد فرم 2 :

private void button1_Click(object sender, EventArgs e)
{
((Form)this.Tag).Show();
this.Close();
}

babak23
شنبه 24 آذر 1386, 08:19 صبح
میتونی از رویداد hide استفاده کنی
این نمونه مثال به سوال شما جواب میده

mr_moghimkhani
شنبه 24 آذر 1386, 08:26 صبح
اینجوری که راحت تره:


private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
this.Hide();
frm.ShowDialog();
This.show();

}

sinpin
شنبه 24 آذر 1386, 08:34 صبح
اینجوری که راحت تره:


private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
this.Hide();
frm.ShowDialog();
This.show();

}


حق با شماست، با محدود کردن شرایط و مفروضات مساله میشه راه حل ساده تری ارائه داد. اما آیا استفاده از ShowDialog همواره راه حل خوبی است؟

mr_moghimkhani
شنبه 24 آذر 1386, 08:51 صبح
حق با شماست، با محدود کردن شرایط و مفروضات مساله میشه راه حل ساده تری ارائه داد.

بله، حق با شماست ولی در صورت مسئله چیزی در مورد چگونگی باز شدن فرم دوم بیان نشده است.

اما آیا استفاده از ShowDialog همواره راه حل خوبی است؟
از نحوه سئوال شما اینگونه بر می آید که استفاده از ShowDialog دارای معایبی است:متفکر:، اگر چنین است، بیان کنید تا من هم متوجه بشوم، ولی من تا به حال چیزی از معایب آن نشنیده ام. و همیشه بنا به مصلحت و تفاوت آن با Show ازش استفاده می کرده ام و این هم روشی است که فکر کنم برای شروع کار خوب باشد. اگر مطالب بیشتری می دانید خوشحال مشم که به من هم بگید دوست عزیز.

sinpin
شنبه 24 آذر 1386, 09:14 صبح
از نحوه سئوال شما اینگونه بر می آید که استفاده از ShowDialog دارای معایبی است:متفکر:، اگر چنین است، بیان کنید تا من هم متوجه بشوم، ولی من تا به حال چیزی از معایب آن نشنیده ام. و همیشه بنا به مصلحت و تفاوت آن با Show ازش استفاده می کرده ام و این هم روشی است که فکر کنم برای شروع کار خوب باشد. اگر مطالب بیشتری می دانید خوشحال مشم که به من هم بگید دوست عزیز.


خیر من چنین چیزی نگفتم، فقط پرسیدم آیا همیشه استفاده از اون مفیده؟

حق با شماست، با محدود کردن شرایط و مفروضات مساله میشه راه حل ساده تری ارائه داد. اما آیا استفاده از ShowDialog همواره راه حل خوبی است؟

فرض کنید فرمی که در این مثال hide شده (فرم 1) به دلایلی لازم باشه لحظه ای show بشه و همانطور که فرم 2 باز است کاربر بخواهد اطلاعاتی را در آن وارد کند. در آنصورت اگر ما فرم2 رو بصورت مودال باز کرده باشیم ؛ مادامیکه فرم جدید را نبندیم این امکان را نخواهیم داشت که با فرم قبلی کار کنیم.
بصورت خلاصه :‌ راه حل شما کاملا صحیح است اما برای حالت خاص (یعنی ممکنه همیشه کار با یک فرم به این سادگی نباشه...)


Forms and dialog boxes are either modal or modeless. A modal form or dialog box must be closed or hidden before you can continue working with the rest of the application. For more information about working with dialog boxes, see User Input to Dialog Boxes (http://msdn2.microsoft.com/en-us/library/1s9ws53w%28VS.80%29.aspx).
Dialog boxes that display important messages should always be modal. The About dialog box in Visual Studio is an example of a modal dialog box. MessageBox (http://msdn2.microsoft.com/en-us/library/411ze57x%28VS.80%29.aspx) is a modal form you can use.
Modeless forms let you shift the focus between the form and another form without having to close the initial form. The user can continue to work elsewhere in any application while the form is displayed.

Modeless forms are harder to program, because users can access them in an unpredictable order. You have to keep the state of the application consistent no matter what the user does. Often, tool windows are shown in a modeless fashion. The Find dialog box, accessible from the Edit menu in Visual Studio, is an example of a modeless dialog box. Use modeless forms to display frequently used commands or information.
منبع : (http://msdn2.microsoft.com/en-us/library/39wcs2dh%28VS.80%29.aspx)http://msdn2.microsoft.com/en-us/library/39wcs2dh(VS.80).aspx (http://msdn2.microsoft.com/en-us/library/39wcs2dh%28VS.80%29.aspx)

با توجه به متن بالا :‌ فرضا در یک ویرایشگر متن، فرم Find حتما باید بصورت Modeless‌ باز شود (چون کاربر میخواهد با فرم قبلی نیز تراکنش داشته باشد)

mr_moghimkhani
شنبه 24 آذر 1386, 09:40 صبح
خوب که نگاه میکنم ، میبینم ما هر دو یک چیز را بیان میکنیم. اگر صورت مسئله به آن چیزی که در پست اخیر بیان نمودید تغییر کند، من هم از روشهایی شبیه آنچه بیان نمودید استفاده میکنم. ولی اگر بازگردیم به سوال اصلی مطروحه در این تاپیک تمامی راه حل ها مشکل فوق را برطرف خواهند کرد. مگر اینکه سوال طور دیگری مطرح شود.
با تشکر از شما دوست گرامی

iranigirl1364
شنبه 24 آذر 1386, 09:55 صبح
با سلام مجدد:
قبل از هر چیز لازمه از توجه و راهنمایی همه شما تشکر کنم.و از بحثهایی که مطرح شده بود خیلی استفاده کردم.
اگر براتون امکان داره به این فایل ضمیمه که گذاشتم لطفا یک نگاهی بیندازید و بازم منو راهنمایی کنید.
من مجبورم از ShowDialog استفاده کنم اما مشکل اینکه وقتی از این متد استفاده می کنم ,
Form2 دیگه بسته نمی شه.
اگه بازم منو راهنمایی کندی ممنون می شم
با تشکر

mr_moghimkhani
شنبه 24 آذر 1386, 10:11 صبح
شما اگر از کد


private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
this.Hide();
frm.ShowDialog();
This.show();

}

استفاده کنید در Form2 دیگر نیازی به Form2_FormClosed ندارید. و در فرم2 فقط this.Close() مشکل شما را حل خواهد کرد.

iranigirl1364
شنبه 24 آذر 1386, 10:42 صبح
بسیار بسیار از راهنمایی شما ممنونم