PDA

View Full Version : نمایش فرمهای Child (فقط یکبار)



unique1984
دوشنبه 14 مرداد 1387, 10:15 صبح
سلام .
من میخوام در فرمهای mdiparent وقتی یه فرم child رو باز می کنم. اگه مجددا اقدام به باز کردن همین فرم (child) ، فرم جدید دیگه ای باز نکنه. در واقع تا زمانیکه برنامه در حالت run هستش نتونم بیشتر از یه فرم از همون child باز کنم.
مرسی

sinpin
دوشنبه 14 مرداد 1387, 10:22 صبح
در كلاس Application كالكشني بنام OpenForms وجود دارد كه فرمهاي لود شده را نشان ميدهد. شما ميتوانيد يك شرط بگذاريد كه اگر فرم دلخواه قبلا باز نشده يك فرم جديد باز كنيد وگرنه به جاي باز شدن تنها آن را فعال نمايد.

unique1984
دوشنبه 14 مرداد 1387, 17:52 عصر
از راهنمائیتون ممنون. ولی اگه ممکنه کدشو می خوام.

H2K
دوشنبه 14 مرداد 1387, 18:19 عصر
سلام اين هم يك نمونه





publicstatic System.Windows.Forms.Form isExist(string Name)
{
foreach (Form frm inApplication.OpenForms)
{
if (frm.Text.Trim() == Name.Trim() && frm.GetType() == typeof("Form morede nazar"))
return frm;
}
returnnull;
}

tthenry14plus
سه شنبه 15 مرداد 1387, 02:25 صبح
کار راحتتر اینه که یه تابع برای اینکار بنویسید و هر بار تابع رو صدا بزنید و .....
تابع:


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

مثال از نحوه استفاده:


privatevoid Title_btn_Click(object sender, EventArgs e)
{
About_form af = newAbout_form();
if (IsRunning("About_form"))
af.BringToFront();
else
af.Show();
}

با این تابع اگر فرم مورد نظر بسته باشه که بازش میکنه اما اگر فرم باز باشه فقط اون رو به اولین سطح ممکن میاره و روی تمامی فرم ها قرار میدهو

unique1984
چهارشنبه 16 مرداد 1387, 09:55 صبح
ضمن تشکر از king of loop و tthenry14plus ، باید بگم که کدهایی که جناب king of loop گذاشتند برای فرم های عادی هستش و با کمی تغییر کوچک که خود جناب tthenry14plus در کدشون لحاظ کردند برای فرم های از نوع mdiparent وchild هم این مورد جواب می ده که در لینک زیر می تونین به این کد دسترسی داشته باشین.
http://barnamenevis.org/forum/showthread.php?t=95001&page=31

H2K
جمعه 18 مرداد 1387, 23:59 عصر
و البته اصولی تر از همه این ها، استفاده از الگوی سینگلتون می باشد، که بار ها نیز مطرح شده است..

tthenry14plus
شنبه 19 مرداد 1387, 01:20 صبح
کاملا درسته ولی مزیتی که در این روش هست اینه که اگر فرم باز باشه اونرو به اولین سطح میاره ...

H2K
شنبه 19 مرداد 1387, 10:06 صبح
مگه نميشه با سينگلتون اين کار را کرد؟ !!!

tthenry14plus
یک شنبه 20 مرداد 1387, 02:17 صبح
نگفتم نمیشه ولی اگر ممکنه یک نمونه بذارید