PDA

View Full Version : سوال: نحوه ی جابجایی بین فرمها بدون ساختن شیء از آنها !؟



b.i.r.i.y.a
شنبه 08 بهمن 1390, 12:17 عصر
سلام دوستان.
فرض کنید یه برنامه ی ساده داریم که فقط دو تا فرم داره. و روی هر فرمی یک کلید هست که اون یکی فرم رو باز میکنه. با ساخت شئ از فرم دیگه و استفاده از تابع show میشه اینکارو کرد ولی اینجوری هربار یه نمونه ی جدید از اون فرم ساخته و اجرا میشه! درحالی که من میخوام از هر فرمی دقیقا یک نمونه باشه و هربار فقط همونا باز و بسته بشن. به عبارت دیگه میخوام این دکمه ها شبیه لینک هایی بین دو فرم برنامه عمل کنند. امیدوارم منظورمو رسونده باشم.

remove-me
شنبه 08 بهمن 1390, 13:41 عصر
با استفاده از دو فیلد استاتیک می تونی اینکارو انجام بدی:
یک کلاس بساز

class FormManager
{
public static Form1 Form1Object { get { return new Form1Object(); } }

public static Form2 Form2Object { get { return new Form2Object(); } }
}

حالا اینجوری بازشون کن:
FormManager.Form1Object.Show()
باید درست عمل کنه باز تو چند حالت تستش کن.

b.i.r.i.y.a
پنج شنبه 04 اسفند 1390, 16:56 عصر
من که متوجه نشدم!
ولی بهرحال خیلی ممنون از راهنماییت.

ma.rad
پنج شنبه 04 اسفند 1390, 17:10 عصر
نیازی به نمونه ساختن نیست از دستور زیر استفاده کنید به جای form اسم فرمتون رو بنویسید:
new form().showdialog();

shadi khanum
پنج شنبه 04 اسفند 1390, 23:16 عصر
دوست عزیز اگه میخوای یه شی رو فقط یه بار new کنی میتونی از الگوی singleton استفاده کنی.
من فک کنم شما میخوای اگه فرم دوم باز بود با کلیک روی دکمه فرم اول ، فرم دوم دوباره ساخته نشه و همون قبلب رو فعال کنه.اگه درست متوجه شدم شما میتونی توی دکمتون قبل از اینکه فرم رو new و show کنی چک کنی اگه بین openformsهات فرم2 هست دیگه new نکنه و همون رو نشون بده

mrbm_2007
پنج شنبه 04 اسفند 1390, 23:37 عصر
نیازی به نمونه ساختن نیست از دستور زیر استفاده کنید به جای form اسم فرمتون رو بنویسید:
new form().showdialog();

نیازی نیست؟ پس این که نوشتی چیه؟ new

به نظر من توی هر فرمت یک آبجکت از نوع اون یکی تعریف کن. توی رویداد دکمه ها چک کن اگر null بود کرییتش کن و گرنه همونو شو کن:متفکر:

class Form1 : Form
{
private Form2 frm2;
void clicked()
{
if (frm2 == null)
frm2 = new Form2();
frm2.Show();
}
}

class Form2 : Form
{
private Form1 frm1;
void clicked()
{
if (frm1 == null)
frm1 = new Form1();
frm1.Show();
}
}

mrbm_2007
پنج شنبه 04 اسفند 1390, 23:38 عصر
از الگوی singleton استفاده کنی.


روش خاصیه؟ می تونی توضیح بدی؟

shadi khanum
جمعه 05 اسفند 1390, 10:28 صبح
روش خاصیه؟ می تونی توضیح بدی؟
singleTon یکی از الگوهای طراحی نرم افزار که وقتی استفاده میشه که شما میخوای از یه کلاستون فقط یک شی بشه ساخته بشه و در سایر موارد همون شی برگشت داده بشه. مثلا اگه داری واسه یه کارخونه برنامه مینویسی از کلاس کارخونه فقط باید یک بار بشه شی new کرد و بقیه جاها فقط باید از استفاده کرد.. اگه Singleton Pattern رو سرچ کنی روش و تکنیک پیاده سازیش (نمومه کد واسش زیاده)رو پیدا میکنی..
موفق باشی

b.saminjad
جمعه 05 اسفند 1390, 11:56 صبح
سلام

تو کلاس فعلی یک شی از فرم دوم بساز



public partial class Form1 : Form

{


Form2 x = newForm2();
.
.
.
.



و در رویداد کلیک دکمه کدهای زیر رو قرار بده




try

{

x.Show();

x.BringToFront();

}


catch (System.Exception)

{

x =newForm2();


x.Show();

x.BringToFront();

}

b.i.r.i.y.a
شنبه 13 اسفند 1390, 13:26 عصر
دوست عزیز اگه میخوای یه شی رو فقط یه بار new کنی میتونی از الگوی singleton استفاده کنی.
من فک کنم شما میخوای اگه فرم دوم باز بود با کلیک روی دکمه فرم اول ، فرم دوم دوباره ساخته نشه و همون قبلب رو فعال کنه.اگه درست متوجه شدم شما میتونی توی دکمتون قبل از اینکه فرم رو new و show کنی چک کنی اگه بین openformsهات فرم2 هست دیگه new نکنه و همون رو نشون بده

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

mhsn_Danger
شنبه 13 اسفند 1390, 14:48 عصر
بسم الله الرحمن الرحیم

سلام
کد زیر به کارتون میاد:
foreach (Form item in Application.OpenForms)
{
if (item.Name == "")
{
item.Show();
return;
// فرم باز است
}
}
Form1 frm = new Form1();
frm.Show();
به امید ظهور مولای عزیزمان

aliasghar2
شنبه 13 اسفند 1390, 22:25 عصر
ولی من همه این راه ها رو که می بینم یه جوری یک شی ایجاد شده (تمام روش ها )

b.i.r.i.y.a
پنج شنبه 18 اسفند 1390, 16:45 عصر
ولی من همه این راه ها رو که می بینم یه جوری یک شی ایجاد شده (تمام روش ها )

آره ، ولی اگه اون فرم خاص باز نباشه. در غیر اینصورت همون فرم خاص ، Show میشه

mehdi zanjani
پنج شنبه 18 اسفند 1390, 17:54 عصر
نیازی به نمونه ساختن نیست از دستور زیر استفاده کنید به جای form اسم فرمتون رو بنویسید:
new form().showdialog();

نیازی به نمونه سازی نیست پس new چیه ؟؟
new ی شیء جدید ایجاد میکنه.