PDA

View Full Version : حرفه ای: نمایش دادن فقط یک بار هر فرم روی MDI form



سمانه علوی فر
دوشنبه 03 آبان 1389, 11:06 صبح
با سلام
من برنامه خود را ضمیمه می کنم تا کمکم کنید
در این برنامه از کامپوننت WeifenLuo.WinFormsUI.Docking.dll استفاده کرده ام
در این کامپوننت که ظاهر منوی برنامه شبیه آفیس 2007 می شود باید برای نمایش فرمها از DockPanel استفاده کرد .
مشکل اینجاست که در این حالت به ازای هر دفعه کلیک یک بار فرم را باز می کنم
کد زیر را نوشتم ولی باز هم جواب نمی دهد در واقع اصلا وارد حلقه نمی شود:


Form1 Child = new Form1();
MdiMain Parent = new MdiMain();



foreach (Form f in Parent.MdiChildren )

if (f.Name == Child.Name)
{
Child.Select();
return;
}

Child.Show(DockPanel);


خواهش می کنم یک پیشنهاد ارائه دهید که برای حل این مشکل چه کنم؟:گریه::گریه::گریه:

http://ttg.ir/test1/newfolder.rar

کدم رو از این ادرس دانلود کنید
مرسی

Reza_Yarahmadi
دوشنبه 03 آبان 1389, 11:11 صبح
كد زير رو امتحان كنيد.

Form Child;
if (Application.OpenForms["Form1"] != null)
Child = Application.OpenForms["Form1"];
else
Child = new Form1();
Child.Show(DockPanel);

unique1984
دوشنبه 03 آبان 1389, 11:32 صبح
سلام
بهتره متد زیر رو بنویسین و برای سایر فرمهای چایلدتون هم ازش استفاده کنین.

private Boolean IsRunning(string formName)
{
foreach (Form frm in Application.OpenForms)
{
if ((frm.Name == formName))
{
frm.BringToFront();
return true;
}
}
return false;
}

و برای استفاده از اون هم به صورت زیر عمل کنین

Form1 Child = new Form1();
if ( !IsRunning("Form1"))
Child.Show();

سمانه علوی فر
دوشنبه 03 آبان 1389, 14:55 عصر
دوستای عزیز
ایده کاملا درست بود ولی تو برنامه من جواب و این طوری اصلاح شد :



Form1 Child = new Form1();
MdiMain Parent = new MdiMain();



//foreach (Form f in Parent.MdiChildren)
foreach (Form f in Application.OpenForms )
if (f.Name == Child.Name)
{
Child.Select();
return;
}

Child.Show(DockPanel);



خیلی خیلی ممنونم بابت توجه و پاسختون
مرسی