PDA

View Full Version : سوال: سوییچ کرد نبین فرمها و بازگشت به فرم اصلی



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

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

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

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

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

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



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

saeid4634
جمعه 04 شهریور 1390, 15:56 عصر
شما يه شئ internal از اون فرم اصليت تو تمام فرم ها بساز بعد قبل از نمايش هر فرمي اونو با this مقدار بده.
fr.pfrm=this;
fr.show();
hide();
بعدشم وقتي از فرم خواستي به فرم اصليت برگردي
frm.show();
close();

saeedjafari
جمعه 04 شهریور 1390, 16:12 عصر
با درود دوست گرامی
در مورد این internal اگر کمی توضیح بدین ممنو نمیشم
شما فرض کنید ما N ت افرم داریم
هی میخواهی مبریم به هر فرم اطلاعتتی رو ثبت یا ویرایش کنیم سپس برگردیم به فرم اصلیمون که به هم هفرم های دیگه دسترسی داره

باز هم من چک میکن مببینیم درست میشه یا نه

با تشکر

saeid4634
جمعه 04 شهریور 1390, 16:40 عصر
internal يا public تو اين موضوع فرقي نداره و كارتو راه ميندازه، بعدشم جرا حتماً فرم اصلي رو نميخواي نمايش بدي بزار هميشه نمايش داده بشه مثل همه برنامه ها photoshop, office, ...

saeedjafari
جمعه 04 شهریور 1390, 16:58 عصر
با درود
مرسی عزیز
ما میخواهیم با چندین فرم در تماس باشیم
فرم اصلی باید مخفی باشه
جالب نیس فرم اصل نمایش داد هبشه
راستی حافظه رو آزد ه مباید کنیم

با تشکر

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

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

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

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

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

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

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


1.برای سوییچ کردن بین فرمها شما می تونید به ازای هر فرم فرزند در داخل فرم والد یه Property تعریف کنی
مثلا فرم فرزند Form2 و فرم والد اسمش Form1 باشه به صورت زیر تعریف میکنید
یه متغیر private تعریف میکنید برای نگه داری شیء ساخته شده از فرم فرزند به شکل زیر:

private mForm2
بعد یه Property می سازید برای اینکه بتونید مقدار متغیر بالا را در موقع نیاز بخونید یا اون رو مقدار دهی کنید




public Form2 objForm2
{
get { return mform2; }
set
{
if (mform2.IsDisposed || mform2 == null)
mform2 = new Form2();
}
}


بعد موقع فراخوانی مثلا توی رویداد click مربوط به button به صورت زیر عمل کنید



private void button1_Click(object sender, EventArgs e)
{

objForm2 = new Form2();
objForm2.MdiParent = this;
objForm2.Show();
this.Hide();

}


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



#region Properties For Control Child Forms
public Form2 objForm2
{
get { return mform2; }
set
{
if (mform2.IsDisposed || mform2 == null)
mform2 = new Form2();
}
}
#endregion


2. اما درمورد اینکه شما میخواهید فرم والد مخفی بشه باید بگم این امکان نداره چون با مخفی شدن فرم والد ، فرم های فرزند هم مخفی میشن و دلیلش هم اینه که تمام فرم های فرزند موقع نمایش داخل فرم والد قرار میگیرند بنابراین فرم والد حتماً باید نمایش داده بشه

saeedjafari
شنبه 05 شهریور 1390, 00:15 صبح
میشه به صورت یه برنامه بزارید من بتونم ببینم
از کد نویسی شما چیزی متوجه نشدم
با تشکر

saeedjafari
شنبه 12 شهریور 1390, 22:41 عصر
اگر لطف کنید همین کدی که فرمودین به صورت یه برنامه قرار بدین ممنون میشم
با تشکر

mohammad_cmd
شنبه 12 شهریور 1390, 23:33 عصر
سلام ، شما هنوز گیر این مشکلی

saeedjafari
یک شنبه 13 شهریور 1390, 19:33 عصر
آخه هر کاری کردیم درس نمیشه
فکر کن در منوی اصلی 5 تا کلید داری
به هر منوی دیگه میرو بر میگریدی
آیا حافظه آزد شده ؟؟
منوی اصلی که پنهان شده هنوز تو TASK MANAGER نشون داده میشه

مشکلم با این هست
وگرنه با کد نویسی مشکل خاصی ندارم

با تشکر