PDA

View Full Version : بستن فرم پدر با باز کردن فرم فرزند



msh487
چهارشنبه 15 خرداد 1387, 15:20 عصر
سلام
من یه فرم دارم که در اون با کلیک بر روی یه دکمه فرم دیگه ای باز میشه . می خواهم همزمان با بازشدن فرم فرزند (فرم 2) فرم پدر بسته بشه .

در فرم 1 این کد را در دکمه مورد نظر نوشتم :

form2 frm2 = new form2()
frm2.show()
this.close

ولی فرم 1 باز هم باز می مونه

H2K
چهارشنبه 15 خرداد 1387, 15:57 عصر
Form2 MM = new Form2();
this.Hide();
MM.Show();

alaaaa
چهارشنبه 15 خرداد 1387, 21:33 عصر
در روشی که آقای king of loop (http://barnamenevis.org/forum/member.php?u=56021) گفت اند، فرم پدر بسته نمی شه بلکه فقط از دید کاربر پنهان میشه در حالی که در حال اجراست
شما می تونید با تعریف یک Thread این کار رو انجام بدید




using System.Threading;

private void button1_Click(object sender, EventArgs e)
{
Thread run = new Thread(new ThreadStart(runNewForm));
run.Start();
this.Close();
}

private void runNewForm()
{
Application.Run(new Form2());
}

msh487
جمعه 17 خرداد 1387, 15:07 عصر
ممنون از جوابتون . روشی رو که آقای King Of Loop گفتند رو می دونستم ولی من می خواهم فر بسته بشه نه مخفی .
کاری رو هم که اقای alaaaa گفتند رو نتوستم انجام بدم .
ممنون میشم کمک کنید . خیلی فوری

H2K
جمعه 17 خرداد 1387, 15:21 عصر
‫فا یل رو از پیوست Download کن :لبخندساده:

msh487
جمعه 17 خرداد 1387, 21:38 عصر
ممنون از آقای king of loop
روشی که آقای alaaaa گفتند رو تونستم عملی کنم . خیلی جالبه ولی مشکلی که هست چطور میشه اطلاعات فرم رو هم به فرم جدید منتقل کرد و مثلا در edit box ها نمایش داد ؟؟؟؟

H2K
جمعه 17 خرداد 1387, 22:33 عصر
:لبخندساده:

‫دو ست عزیز همه پست ها یی که زدین جوابش اینجا هست


http://barnamenevis.org/forum/showthread.php?t=95001

alaaaa
جمعه 17 خرداد 1387, 22:43 عصر
جواب در پیوست

bahar_engineer
چهارشنبه 24 تیر 1388, 10:13 صبح
چرا به من این خطا رو می ده از همون thread ها استفاده کردم ... فرم پدر که فقط شامل یه عکس هست بسته نمی شه ...



Unable to get the window handle for the 'AxShockwaveFlash' control. Windowless ActiveX controls are not supported.


البته اون فرم فرزند بک گراند فلش داره ... چکار باید کرد؟

bahar_engineer
چهارشنبه 24 تیر 1388, 12:23 عصر
من هر کاری می کنم درست نمی شه

ببینید وقتی این دستور رو می نویسم :



form1 f1 = new form1();
f1.show();
this.close();


با اینکه فرم جاری که با دستور this.close می خوام ببندمش فرم اصلی من نیست(یعنی توی program.cs به عنوان فرم اولیه که باید لود بشه قرار نگرفته) ولی با این دستور، کل فرم های من رو می بنده . در واقع انگار application.exit اتفاق می افته .

و زمانی که با این کد بخوام صفحه جاری رو ببندم و به صفحه بعدی برم :


form1 f1 = new form1();
f1.showdialog();
this.close();


هیچ فرمی بسته نمی شه حتی فرم جاری با اینکه من دستور بسته شدن رو بهش دادم


من احساس می کنم یه اتصال بین تمام فرم هایی که باتنی برای فرم بعدی دارند وجود داره که همه اونها رو به فرم اولیه وصل می کنه ... یعنی با بسته شدن یکی از اونها انگار فرم اولیه بسته شده... انگار هر بار با بازشدن فرم جدید program.cs اون رو توی application.run قرار می ده که با بسته شدنش کل برنامه بسته می شه

یکی راه حل بده لطفاً

debugger
چهارشنبه 24 تیر 1388, 14:36 عصر
جواب در پیوست



من سور س شما را دیدم

بسیار عالی بود

حالا من میخوام از Form2 به Form1 برم از همین روش شما استفاده کردم ولی جواب نداد

یعنی روی فرم 2 یه دکمه گذاشتم و کد های بالا را برای فرم 2 هم نوشتم. ولی ارور داد و گفت که فرم 1 وجود ندارد

حالا شما می تونید یه کاری کنید که از فرم 2 هم با همین روش به فرم 1 برگشت؟؟؟؟

debugger
پنج شنبه 25 تیر 1388, 07:42 صبح
کسی از دوستان نیست قسمت دوم کد را کامل کنه

Reza_Yarahmadi
پنج شنبه 25 تیر 1388, 12:26 عصر
با اینکه فرم جاری که با دستور this.close می خوام ببندمش فرم اصلی من نیست(یعنی توی program.cs به عنوان فرم اولیه که باید لود بشه قرار نگرفته) ولی با این دستور، کل فرم های من رو می بنده . در واقع انگار application.exit اتفاق می افته .
احتمالا میخواید فرم پدر رو ببندید و فرم فرزند را باز کنید که توی این حالت فرم فرزند بسته میشه و یا توی رویداد بسته شدن فرم مورد نظر کد خاصی رو نوشتید.


form1 f1 = new form1();
f1.showdialog();
this.close(); هیچ فرمی بسته نمی شه حتی فرم جاری با اینکه من دستور بسته شدن رو بهش دادم

تا زمانی که فرم f1 بسته نشه دستورات بعد از
f1.showdialog(); انجام نمیشه.


حالا من میخوام از Form2 به Form1 برم از همین روش شما استفاده کردم ولی جواب نداد

یعنی روی فرم 2 یه دکمه گذاشتم و کد های بالا را برای فرم 2 هم نوشتم. ولی ارور داد و گفت که فرم 1 وجود ندارد
اگه به همون نحوی که از فرم1 به فرم2 میره برای برگشت استفاده کرد Stack Over flow رخ میده که اونم به این دلیله که وقتی هر کدوم از فرمها رو new میکنی فرم جدید هم یه شی از فرم دیگه درست میکنه و همین روند ادامه پیدا میکنه تا زمانی که stack پر میشه و ...
یه تغییر کوچیک توی کد بدی درست میشه


private void button1_Click(object sender, EventArgs e)
{
Form1 newForm = new Form1();
newForm.textBox1.Text = textBox1.Text;
Thread run = new Thread(delegate(){runNewForm(newForm);});
run.Start();
this.Close();
}
private void runNewForm(Form1 newForm)
{
Application.Run(newForm);
}