PDA

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



tthenry14plus
شنبه 20 بهمن 1386, 12:44 عصر
می خوام از داخل یک فرم فرم دیگری را ببندم ولی با دستور مستقیم نمیشه چه کنم ؟

دستورم اینه :
برای مثال این دستور را در رویداد کلیک یکی از آبجکت های فرم 1 نوشتم ولی جواب نمیده !!! خطایی هم نداره، باید پارامتری چیزی به فرم 1 ارسال کنم ؟؟؟؟؟؟؟؟؟؟؟



form2 f2=new form2();
f2.close();

hassan razavi
شنبه 20 بهمن 1386, 13:03 عصر
اگه از Singleton Pattern استفاده کنید ، می تونید فرمتون را از هر فرم دیگری ببندید.
جستجو کنید با مثا کامل نحوه پیاده سازی الگوی Singleton را در همین تالار پیدا می کنی.

Sayehzendeh
شنبه 20 بهمن 1386, 13:25 عصر
شما احتمالا چند instance از فرم2 میسازید باید یک متغیر Public بسازید یا در constractore مقداردهی کنید یا در هر جا میدونید لازمه ولی نباید Null باشه.


Form2 f;
public Form1()
{
InitializeComponent();
f = new Form2();
}

Mahdi.Kiani
شنبه 20 بهمن 1386, 15:59 عصر
می خوام از داخل یک فرم فرم دیگری را ببندم
[/code]
به چه دلیل می خواین این کار را بکنین؟ یعنی از داخل یک فرم یکی دیگه را ببندین؟ مشکل اصلی کجاست که این راه را براش پیشنهاد کردین؟

sinpin
یک شنبه 21 بهمن 1386, 08:41 صبح
دستورم اینه :
برای مثال این دستور را در رویداد کلیک یکی از آبجکت های فرم 1 نوشتم ولی جواب نمیده !!! خطایی هم نداره، باید پارامتری چیزی به فرم 1 ارسال کنم ؟؟؟؟؟؟؟؟؟؟؟


form2 f2=new form2();
f2.close();

شما دارید یه آبجکت جدید میسازید و بلافاصله همون (و نه اون چیزی رو که تصور میکنید) رو کلوز میکنید ؟
راه صحیح استفاده از الگوی Singleton است، اما چنانچه زیاد دل خوشی از این قرتی بازیها (!!!) ندارید روشهای غیر استاندارد دیگری هم هست مثل پاس دادن آدرس آبجکت فرم اول به کانستراکتر فرم دوم، استفاده از خاصیت Tag و ...
مثلا :

public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Tag = this;
frm.Show();
}
}
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm = this.Tag as Form1;
}
}

hasan_esfahan
یک شنبه 21 بهمن 1386, 17:46 عصر
برای خروج کامل

application.exit();

برای بستن پنجره فعلی

this.clos();

الهم اخرجنی من الظلمات الوهم و اکرمنی به نورالفهم

sarnev6t
یک شنبه 21 بهمن 1386, 21:26 عصر
فکر میکنم مشکل ایشون این باشه که فرم جاری بسته بشه و فرم دیگری باز بشه
حالا اگه اول از فرم جاری خارج بشیم دیگه دستور بعدی اجرا نمیشه
اگرم بر عکس عمل کنیم کنترل به فرم بعدی میره وفرم اولی بسته نمیشه!

Mahdi.Kiani
یک شنبه 21 بهمن 1386, 22:53 عصر
فکر میکنم مشکل ایشون این باشه که فرم جاری بسته بشه و فرم دیگری باز بشه
حالا اگه اول از فرم جاری خارج بشیم دیگه دستور بعدی اجرا نمیشه
اگرم بر عکس عمل کنیم کنترل به فرم بعدی میره وفرم اولی بسته نمیشه!

اگر منظورشون از یک همچین کاری ساختن یه چیزی توی مایه های فرم های ویزاردی هست که باید بگم معمولا توی ویزارد ها فرم را نمی بندن بلکه hide می کنن. که بعدا وبسته به نوع پیاده سازی بتونن اونو دو باره show کنن.

tthenry14plus
سه شنبه 23 بهمن 1386, 23:52 عصر
از تمامی دوستان ممنونم
خودم برای اینکار از روش غیر استاندارد پارامتر سازنده (constractor) استفاده کردم، وی خواستم روش استانداردشو بدونم که زحمت کشیدید و گفتید.

من دارم یک برنامه با قالب گرافیکی مستقل می نویسم که همه چیزش حتی اسکرول های اون نیز ساختگی باشه و از تنها آبجکت هایی که استفاده می کنم picture box و lable ها هستند، اینکه از داخل یک فرم، فرم دیگری را ببندم هم مربوط به dialog box دستی خودم بود که هنگام خروج وقتی از داخل فرم دیگری که حکم dialog box را دارد "بله" را کلیکیدیم فرم اصلی یا هر فرم دیگری بسته شود.
از تمامی دوستان هم تشکر می کنم

sinpin
چهارشنبه 24 بهمن 1386, 07:48 صبح
از تمامی دوستان ممنونم
خودم برای اینکار از روش غیر استاندارد پارامتر سازنده (constractor) استفاده کردم، وی خواستم روش استانداردشو بدونم که زحمت کشیدید و گفتید.
من خودم - در حال حاضر - از این روش استفاده میکنم :
آموزش : نحوه ی کنترل کردن فرمها و مشکلات متداول (http://barnamenevis.org/forum/showthread.php?t=90581)
البته سعی ندارم که بگم این روش خیلی خوبه و شما هم حتما از همین روش استفاده کنید؛ چون خودم 6 ماه بعد از یک روش دیگه استفاده میکنم! اما لطفا اگه دوستان روش بهتری سراغ دارند اعلام کنند.

tthenry14plus
پنج شنبه 25 بهمن 1386, 00:39 صبح
ممنونم
ولی من هم دنبال یک روش بهترم

Amir Oveisi
پنج شنبه 25 بهمن 1386, 03:01 صبح
Application.OpenForms["yourFormName"].Close();