PDA

View Full Version : سوال: از هر فرم فقط یکی باز بشه؟



bozhmehrani
سه شنبه 01 شهریور 1390, 00:35 صبح
سلام من چندتافرم دارم می خوام هر وقت فرم باز بشه.اگه باز بود دوباره باز نشه active بشه.نه می خوام از show dialog استفاده کنم نه از MDI form..

با تابع show().

faravaghi
سه شنبه 01 شهریور 1390, 01:08 صبح
سلام،
این یه راه حل خوبیه، استفاده کنید انشاء الله جواب بده:
form1 frm1 = new form1(UID);
CheckMdiChildren(frm1);

private void CheckMdiChildren(Form form)
{
foreach (Form frm in this.MdiChildren)
{
if (frm.GetType() == form.GetType())
{
frm.Focus();
return;
}
}

form.MdiParent = this;
form.Show();
}

navidkhalilian
سه شنبه 01 شهریور 1390, 02:00 صبح
سلام.این کد چک میکنه اگر فرم نمونه باشه اونو فعال می کنه.

foreach (Form frm in Application.OpenForms)
{
if (frm is FORM1)
{

FORM1 f1 = (FORM1)frm;
f1.Activate();
}
}

موفق باشید.

bozhmehrani
سه شنبه 01 شهریور 1390, 21:00 عصر
سلام به خاطر کمکی که کردی واسه سوالم ممنون.ولی هنوز این مشکلو دارم.نتونستم از پسش بر بیام
من یه فرم اصلی دارم که تو منو های اون فرم ها فراخوانی میشند.به خاطر مشکلاتی که ام دی آی فرم ها داشتند از اونا استفاده نکردم
تو صفحه اصلی یه تابع بنویسم که برای باز شدنه هر فرم فراخوانی بشه و چک کنه اگه فرم بازه اونو اکتیو کنه همین.


مرسی .

Felony
سه شنبه 01 شهریور 1390, 22:40 عصر
یک تابع براتون نوشتم :

private Boolean IsOpened(string Name)
{
foreach (Form frm in Application.OpenForms)
if (frm.Name == Name)
if (frm.Created == true)
{
frm.Show();
frm.Activate();
return true;
}
return false;
}

نمونه استفاده :

Form2 frm2 = null;
if (IsOpened("Form2") == false)
{
frm2 = new Form2();
frm2.Show();
}

Form3 frm3 = null;
if (IsOpened("Form3") == false)
{
frm3 = new Form3();
frm3.Show();
};

Form2 frm22 = null;
if (IsOpened("Form2") == false)
{
frm22 = new Form2();
frm22.Show();
}

bozhmehrani
چهارشنبه 02 شهریور 1390, 10:58 صبح
تشکر از دوستان . عالی بود.

navidkhalilian
پنج شنبه 03 شهریور 1390, 00:52 صبح
74333سلام دوستان.اینم تکه کدی که من آماده کردم(البته با اجازه اساتید).امیدوارم که بدرد بخور باشه.

اول یک تابع بصورت زیر تعریف می کنیم :(البته داخل یک کلاس باشه که همه جای برنامه بشه ازش استفاده کرد)

public static Form IsFormAlreadyOpen(Type FormType)
{
foreach (Form OpenForm in Application.OpenForms)
{
if (OpenForm.GetType() == FormType)
return OpenForm;
}

return null;
}

بعد هم تابع رو به این صورت صدا میزنیم:


Form3 F1 = null;
if ((F1 = (Form3)IsFormAlreadyOpen(typeof(Form3))) == null)
{
F1 = new Form3();
F1.Show();
}
else
{
F1.Select(); // may be UForm.Select();
}


پروژه ضمیمه هم گزاشتم.موفق باشید

saeedjafari
جمعه 04 شهریور 1390, 15:49 عصر
با درود خدمت دوستان گرامی

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

در این بین دو مشکل وجود دارد :

1- ما نمیخواهیم در هر فرم از فرم اصلی شی بسازیم و فرم اصلی که مخفی شده است را در هر بار بازگشت از فرم های دیگر به فرم اصلی فراخوانی کنیم.

2- در ضمن میخواهیم که در هر بازگشت به فرم اصلی حافظه نیز آزاد باشد که این اتفاق نمیافتد.

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



با تشکر از دوستان گرامی

navidkhalilian
جمعه 04 شهریور 1390, 17:17 عصر
با درود خدمت دوستان گرامی

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

در این بین دو مشکل وجود دارد :

1- ما نمیخواهیم در هر فرم از فرم اصلی شی بسازیم و فرم اصلی که مخفی شده است را در هر بار بازگشت از فرم های دیگر به فرم اصلی فراخوانی کنیم.

2- در ضمن میخواهیم که در هر بازگشت به فرم اصلی حافظه نیز آزاد باشد که این اتفاق نمیافتد.

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



با تشکر از دوستان گرامی




سلام دوست عزیز با تکه کدی که بالا نوشتم خیلی راحت میتونی این کار رو انجام بدی.موفق باشید