PDA

View Full Version : چطور از بوجود آمدن نمونه های جدید جلوگیری کنم



Mos_Zamani
جمعه 20 شهریور 1388, 14:11 عصر
من تو برنامه ام از یه منو اصلی استفاده کردم. ولی هر بار که از طریق منو فرم هامو show می کنم یه نمونه جدید ایجاد می شه. که باعث می شه چند تا نمونه از یه فرم ایجاد بشه که زیاد جالب نیست.
می دونم که علتش اینه:
myform newform = new myform
چطور می تونم کاری کنم که در صورت وجود نمونه ای از فرم، فرم دیگه ای ایجاد نشه و همون قبلی جلوی کاربر ظاهر بشه.
با تشکر

asefy2008
جمعه 20 شهریور 1388, 14:28 عصر
یه راهش این هست که showdialog کنی فرم دومت رو به این ترتیب تا بسته نشه فرم اول در دسترس نیست.

Mos_Zamani
جمعه 20 شهریور 1388, 14:38 عصر
یه راهش این هست که showdialog کنی فرم دومت رو به این ترتیب تا بسته نشه فرم اول در دسترس نیست.

اینو می دونم. ولی این چیزی نیست که من می خوام. من می خوام برنامه ام کار کردن باهاش راحت باشه.
با تشکر

M.YasPro
جمعه 20 شهریور 1388, 15:13 عصر
سلام
هر جا میخوای فرمتو فراخونی کنی اینو بنویس


for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Name == "myform ")
{
return;
}
}
myform newform = new myform

اَرژنگ
جمعه 20 شهریور 1388, 15:17 عصر
سلام
هر جا میخوای فرمتو فراخونی کنی اینو بنویس


for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Name == "myform ")
{
return;
}
}
myform newform = new myform


نه! این روش اشتباه است، روش صحیح استفاده از سینگلتن پترن هستش، در پست بعدی توضیح میدم.

اَرژنگ
جمعه 20 شهریور 1388, 15:21 عصر
من تو برنامه ام از یه منو اصلی استفاده کردم. ولی هر بار که از طریق منو فرم هامو show می کنم یه نمونه جدید ایجاد می شه. که باعث می شه چند تا نمونه از یه فرم ایجاد بشه که زیاد جالب نیست.
می دونم که علتش اینه:
myform newform = new myform
چطور می تونم کاری کنم که در صورت وجود نمونه ای از فرم، فرم دیگه ای ایجاد نشه و همون قبلی جلوی کاربر ظاهر بشه.
با تشکر


private Form1()
{
InitializeComponent();
}

private static Form1 m_instance;
public static Form1 Instance()
{
if (m_instance == null)
m_instance = new Form1();
return m_instance;
}


هر جایی که لازم داشته باشید:
Form1.Instance().Show:

Mos_Zamani
جمعه 20 شهریور 1388, 21:22 عصر
private Form1()
{
InitializeComponent();
}

private static Form1 m_instance;
public static Form1 Instance()
{
if (m_instance == null)
m_instance = new Form1();
return m_instance;
}



هر جایی که لازم داشته باشید:
Form1.Instance().Show:


کد جالبی نوشتی ولی 2 تا مشکل داره.
یکی اینکه موقعی که فرم رو باز می کنم با کلیک دوباره روی منو، اونو نشون نمی ده و همونطور minimize نگه می داره.
و دیگه این که وقتی فرم رو می بندم و دوباره روی منو کلیک می کنم یه خطای زمان اجرا می ده و می گه که فرمی رو که dispose
کردی نمی شه آورد.

als_1360
جمعه 20 شهریور 1388, 22:24 عصر
البته نمي دونم اين راه كه مي گم درسته يا نه :
myform newform; رو در قسمت عمومي كلاس تعريف كنيد و هر بار لازم شد به اون مقدار بديد و اجرا كنيد