PDA

View Full Version : سوال: بازشدن متوالی فرم



nima.latifi
دوشنبه 15 شهریور 1389, 16:59 عصر
سلام،
یک سوال خیلی ساده...
در برنامه وقتی در form1 میخواهم با یک button فرم دوم را show کنم، از دستور زیر استفاده میکنم:
form form2=new form2
form2.show

این باعث میشه هر بار که بر روی button کلیک میکنم یک فرم جدید باز شه.
خواستم بدونم چکار کنم که فقط یک بار فرم باز شه و با هر بار کلیک کردن همان فرم قبلی که یک بار show شد، فعال شود و فرم دیگری به برنامه اضافه نشود .

با تشکر از ارسال پاسخ شما.

pesar irooni
دوشنبه 15 شهریور 1389, 17:13 عصر
نباید داخل متد button click از new استفاده کنی و باید به جای متغیر محلی از متغیر سراسری برای form2 استفاده کنی.یعنی تعریف متغیر form2 داخل هیچ متدی نباشه و تو form1_load یا تو form1 constructor باید new کنی (یعنی فقط یه بار).
داخل متد button click فقط form2.show رو فراخونی میکنی

nima.latifi
دوشنبه 15 شهریور 1389, 17:57 عصر
نباید داخل متد button click از new استفاده کنی و باید به جای متغیر محلی از متغیر سراسری برای form2 استفاده کنی.یعنی تعریف متغیر form2 داخل هیچ متدی نباشه و تو form1_load یا تو form1 constructor باید new کنی (یعنی فقط یه بار).
داخل متد button click فقط form2.show رو فراخونی میکنی



خوب با این کار فرم یک بار بیشترباز نمیشه اما اگر همین فرم را ببندی و بخواهی دوباره باز کنی با خطای can not access disposed object مواجه می شوم

sinashahab
دوشنبه 15 شهریور 1389, 18:58 عصر
خوب با این کار فرم یک بار بیشترباز نمیشه اما اگر همین فرم را ببندی و بخواهی دوباره باز کنی با خطای can not access disposed object مواجه می شوم

خوب حتما شما موقع بستن فرم این کد رو می نویسید که از حافظه پاک بشه :

this.dispose();

AminErfani
سه شنبه 16 شهریور 1389, 22:09 عصر
خوب حتما شما موقع بستن فرم این کد رو می نویسید که از حافظه پاک بشه :

نه من فرم رو با دکمه (ضرب در ) می بندم و هیچ کدی برای بسته شدنش نمی نویسم. باز هم همون پیغام رو می ده

MEhdi Sobhani
سه شنبه 16 شهریور 1389, 22:28 عصر
سلام
با زدن دکمه کلوز فرم کاملا بسته میشه و حذف هم میشه (dispose )
باید کاری کنید که از بسته شدن فرم جلوگیری بشه و به جای بسته شدن مثلا مخفی بشه .
مثلا در ایونت formclosing باید این رو بنویسید :



private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel=true;
this.Visible=false;
}


بهتره برای اینکه کارها به هم نریزه همون اول یه بار فرم رو لود کنی ولی مخفیش کنی و بعد با اون کلید فقط فرم رو ویزیبل کنی .

Sajjad.Aghapour
سه شنبه 16 شهریور 1389, 22:50 عصر
در این مورد نیز قبلا بحث شده است.
برای این کار میتوانید دوکار انجام بدید:
1. فرم هایی که در Application باز هستند رو توسط Application.OpenForms چک کنید تا ببینید این فرم در این لیست وجود دارد یا نه
2. فرم رو بصورت Singleton فراخوانی کنید.در این صورت فقط یک instance از فرم شما وجود خواهد داشت.

اگر جستجو کنید نتایج جالبی خواهید دید
موفق باشید/

AminErfani
سه شنبه 16 شهریور 1389, 22:56 عصر
خیلی متشکرم ، مشکل حل شد
حالا یه سوال دیگه هم داشتم ، اگه فرم در حالت Minimize باشه چه جوری می تونم نمایش بدمش؟ وقتی فرم Minimize شده با اجرای کد frm.show دیگه نمایش داده نمی شه فقط اون فرم فعال می شه.

Saman_12
سه شنبه 16 شهریور 1389, 23:06 عصر
خیلی متشکرم ، مشکل حل شد
حالا یه سوال دیگه هم داشتم ، اگه فرم در حالت Minimize باشه چه جوری می تونم نمایش بدمش؟ وقتی فرم Minimize شده با اجرای کد frm.show دیگه نمایش داده نمی شه فقط اون فرم فعال می شه.

خوب نرمالش کن.