PDA

View Full Version : form1 و form2



djscsi
یک شنبه 04 مرداد 1388, 18:06 عصر
دوستان من 2 form دارم به اين ترتيب كه فرم1 MdiParentفرم2 هست

من يك panel روي form1 دارم كه با كليك روي button اين panel اين كد اجرا ميشه



panel1.Visible = false;
Form2 f = new Form2();
f.MdiParent = this;
f.Show();


حالا تو ميخام وقتي form2 بسته ميشه panel1 روي form1 ديده بشه يعني visibleش true بشه

ممنون ميشم كمكم كنيد

Reza_Yarahmadi
یک شنبه 04 مرداد 1388, 20:19 عصر
توس رویداد FormClosed مربوط فرم2 کد زیر رو بنویسی

Form f1 = Application.OpenForms["Form1"];
f1.Controls["panel1"].Visible = true;

djscsi
چهارشنبه 07 مرداد 1388, 22:54 عصر
ممنوم دوست عزيز ولي من اينو نوشتم اين ارور رو داد
اين عكسشه

barzin144
پنج شنبه 08 مرداد 1388, 19:39 عصر
دوست عزیز این کد را امتحان کن:

panel1.Visible = false;
Form2 f = new Form2();
f.MdiParent = this;
f.ShowDialog();
panel1.Visible = True;
وقتی panel ،true ,میشه که فرم f بسته بشه

djscsi
پنج شنبه 08 مرداد 1388, 23:29 عصر
ممنون دوست عزيز ولي فكر كنم شما سوال رو درست نخوندي
panel1.Visible = True;
اين خط باعث ميشه كه روي فرم دوم panel1 نشون داده بشه

Mahdi.Kiani
جمعه 09 مرداد 1388, 09:41 صبح
سلام
این عمل می خواهید برای یک فرم خاص اتفاق بیافتد یا اینکه زمانی panel مجددا true شود که تمامی MdiChildForm ها بسته شده باشند؟
در حالت اول می توانید از رویداد Form_Closed فرم مربوطه استفاده کنید. در این رویداد، panel را true کنید./
در حالت دوم هم می توانید از رویداد MdiChildActivate مربوط به فرم Parent استفاده کنید و در صورتی که خاصیت ActiveMdiChild برابر با null بود، مقدار Visible مربوطه به Panel را true قرار دهید./
موفق باشید

djscsi
شنبه 10 مرداد 1388, 00:29 صبح
برا حالت اول من قبلا اين رو تو form_closed فرم2 ن.شته بودم ولي ايرادي داره كه يه form ديگه ايجاد ميشه يعني form1 2تا ميشه

Form1 f = new Form1();
f1.panel1.Visible = True;
f1.ShowDialog();



برا حالت 2 اون كد رو تو كجا بنوسيم ؟تو form_load ?
من اينو نوشتم جواب نداد

private void Login_Form_Load(object sender, EventArgs e)
{
if (MdiChildren == null)
panel1.Visible = true;
}
ممنون

navidiran
شنبه 10 مرداد 1388, 11:50 صبح
سلام
تمام این مطالبی که عنوان کرده اید درباره رابطه فرم فرزند و پدر می باشند.
من در مورد دسترسی به اشیاء فرم فرزند توسط فرزند دیگر به مشکل مواجه شده ام و هیچ راهی پیدا نمی کنم. لطفا در این رابطه راهنمایی کنید

e.g:
form1.textbox1.text=form2.textbox2.text; t

f_pakzad
شنبه 10 مرداد 1388, 17:18 عصر
ب

برا حالت 2 اون كد رو تو كجا بنوسيم ؟تو form_load ?
من اينو نوشتم جواب نداد

private void Login_Form_Load(object sender, EventArgs e)
{
if (MdiChildren == null)
panel1.Visible = true;
}ممنون

نه.تو رویداد MdiChildActivate فرم 1 اینو بنویسید:


if (this.ActiveMdiChild == null)
panel1.Visible = true;

من تست کردم.جواب داد

djscsi
شنبه 10 مرداد 1388, 17:20 عصر
شما بايد يه متغيير از نوع اون فرم تعريف كنيد در ضمن دقت كنيد كه اون شي در قسمت modifiers public باشه

djscsi
شنبه 10 مرداد 1388, 17:29 عصر
ممنون مشكلم حل شد فقط اينو كسي مي تونه توضيح بده

در حالت اول می توانید از رویداد Form_Closed فرم مربوطه استفاده کنید. در این رویداد، panel را true کنید./

Mahdi.Kiani
شنبه 10 مرداد 1388, 19:40 عصر
ممنون مشكلم حل شد فقط اينو كسي مي تونه توضيح بده

در حالت اول می توانید از رویداد Form_Closed فرم مربوطه استفاده کنید. در این رویداد، panel را true کنید./
سلام
من که کامل توضیح دادم. کجاش را مشکل دارید؟

djscsi
دوشنبه 12 مرداد 1388, 18:45 عصر
ببينيد براي دستيابي به panel1 روي form1 از form2 من بايد در form_closed مربوط به form2 اينو بنويسم



form1 f=new form1();
f.panel1.visible=true;
f.shoedialog();

اين كار باعث ميشه يه form1 ديگه ايجاد بشه يعني همون هست و يكي ديگه هم ايجاد ميشه ولي من نميخام اينجوري بشه و ميخام همون form1 قبلي panel1ش visible بشه

Mahdi.Kiani
دوشنبه 12 مرداد 1388, 19:32 عصر
خیر شما از form2 نباید به form1 دسترسی پیداکنید.
شما باید رویداد Form_Closed را در فرم Main (فرم MDIParent ) هندل کنید

djscsi
سه شنبه 13 مرداد 1388, 23:41 عصر
شما باید رویداد Form_Closed را در فرم Main (فرم MDIParent ) هندل کنید
ميشه بيشتر توضيح بديد اگه اشكال نداره برا همين مثال ساده (visible كردن panel1 رو فرم main) كدش رو بنويسيد
ممنون

Mahdi.Kiani
چهارشنبه 14 مرداد 1388, 00:05 صبح
سلام
به مثال ساده ای که ضمیمه کردم توجه کنید.

djscsi
چهارشنبه 14 مرداد 1388, 22:51 عصر
ممنون Mahdi.Kiani (http://barnamenevis.org/forum/member.php?u=47458) جان
من ميخام اجرا كنم ولي به عكس نگاه كن

Mahdi.Kiani
چهارشنبه 14 مرداد 1388, 22:56 عصر
از داخل پوشه WindowsFormApplication فایل WindowsFormApplication1.csproj را اجرا کن

djscsi
پنج شنبه 15 مرداد 1388, 01:56 صبح
ممنون ولي بازم اين ارور زير رو ميده البته شايد مشكل از اينه كه من از نسخه express استفاده ميكنم

Mahdi.Kiani
پنج شنبه 15 مرداد 1388, 11:06 صبح
بله
اون برنامه با VS2008SP1 نوشته شده./


private void btnAddMdiChid_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.MdiParent = this;
form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
form2.Show();
this.panel1.Visible = false;
}

void form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.panel1.Visible = true;
}



راه اولی که گفته بودم را بیشتر توصیه می کنم./ به عنوان مثال این کد زمانی به درد می خوره که در هر لحظه تنها یک نمونه از فرم2 داشته باشید./
هر دو این راه ها، از ساده ترین روش ها می باشند. در برنامه های واقعی طبق Pattern ای که برای برنامه تون در نر گرفتید می تونید این مسئله را به روش های بهتری هم حل کنید./
موفق باشید