PDA

View Full Version : سوال: تشیص فرم های درحال لود/لود شده



mehrdad1991h
سه شنبه 28 شهریور 1391, 00:11 صبح
سلام
یه سوال دارم
من یه برنامه مینویسم که توش مثلا 2 تا فرم داریم و کلیه کلید های ماکسیمم و مینیمم و بستن را از رو همه فرم ها برداشتیم

حالا مثلا به وسیله یک کلید یه نمونه از فرم 2 میسازیم و بازش میکنیم

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

الان این نمونه را هر چند بار بخوایم میتونیم باز کنیم دیگه درست

خوب اگه مثلا من 10 بار برم تو فرم 1 و برگردم تو فرم 2 یک فرم ندارم بلکه یه 10 تا فرم از فرم 1 و 2 دارم
می خوام بدونم چی کار کنم

1 حالا مثلا 100 تا فرم باز شده الان میخوام با کلیک روی دکمه ی بستن فرم اصلی را ببندم
و
2 یا اینکه همه فرم ها را ببنده به جز فرم اصلی
چجوری این کار را بکنم و بفهمم فرم اصلی کودومه...
و
3 سوال اصلیم اینه که چی کار کنم که تا از فرم 1 رفتم به فرم 2 بعدش هرچقدر بخوام فرم 2 را باز کنم نتونم یعنی فقط یه دونه فرم 2 باز بشه و فقط یه دونه فرم 1 باز بشه و فقط جا به جا بشن ....

3 تا سوال شد
ببخشید :)
ممنونتون میشم کمک کنید من بفهمم چی کار کنم و چجوریه
سپاس

mehrdad1991h
سه شنبه 28 شهریور 1391, 10:27 صبح
کسی فهمید من چی میگم ؟

ali_habibi1384
سه شنبه 28 شهریور 1391, 11:00 صبح
فرمهات رو بصورت Showdialog باز كن تا به هيچكدوم از اين موارد برخورد نكني.

Farshid007
سه شنبه 28 شهریور 1391, 11:01 صبح
اگه خودت فهمیدی ما هم می فهمیم!

mehrdad1991h
سه شنبه 28 شهریور 1391, 11:24 صبح
فرمهات رو بصورت Showdialog باز كن تا به هيچكدوم از اين موارد برخورد نكني.

ممنون
ولی میخوام بفهمم چجوری میتونم ببینم فرم من لود شده (در حال اجرا) هست یا نه ! و بهشون دسترسی پیدا کنم مثلا به فرم اولی که اجرا شده دسترسی داشته باشم نه نمونه ی ساخته شده از روش

فرم را مخفی کنم باز در حال اجرا هست ولی ما نمیبینیم ! مثلا من برای باز کردن فرم نمونه میسازم از رو فرم و بازش میکنم ، فرم قبلیش را هم مخفی میکنم ، حالا اگه 2 بار این عمل را انجام بدم 2 تا فرم باز دارم ولی یکیش نمایش داده میشه چون اون قبلی ها مخفی شده و دیگه من بهشون دسترسی ندارم ! حالا میخوام یه جوری از این عمل جلوگیری کنم اومدم یه متغیر بولین قرار دادم تا فرم 2 لود میشه مقدارش 1 بشه و تا از فرم 2 میخوام بیام بیرون مقدارش 0 بشه ولی باز این هم هیچ فرقی نداره چون دوباره نمونه سازی میشه و ....

الان منظورم واضح شد ؟

ali_habibi1384
سه شنبه 28 شهریور 1391, 11:37 صبح
نميدونم دنبال چي هستيد ولي ميتونيد مثلا يه فرم رو اينجوري بياريد:
Application.OpenForms["frmMain"].Show();

ehsan7007
سه شنبه 28 شهریور 1391, 12:21 عصر
دوست عزیز ، خودت فهمیدی چی گفتی؟!


الان منظورم واضح شد ؟
نه! :لبخند:

ali_habibi1384
سه شنبه 28 شهریور 1391, 13:03 عصر
ميخواد با يه دكمه همه فرمهاي باز برنامه رو ببنده بجز فرم اصلي.
و اينكه اگر كاربر يه فرمي رو باز كرد كه قبلا باز شده بود ازش شي نسازه مستقيم همونو باز كنه. درست متوجه شدم آقاي مهرداد؟

ehsan7007
سه شنبه 28 شهریور 1391, 13:30 عصر
اگر منظورشون اینه که برای مسئله ی اول :
Application.OpenForms["Form2"].Close();

اینطوری اگه 3 تافرمداشته باشن و هر 3 باز باشه ، بایک باتن تو فرم 3 می تونن فرم 2 روببندند.

ehsan7007
سه شنبه 28 شهریور 1391, 13:52 عصر
برای مسئله ی دوم هم می تونن به تعداد فرمها متغییر bool تعریف کنن (مثلا تو کلاس)و هنگام باز کردن چک کنه که اسم فرم true هست یا نه ؛ اگر نبود فرمرو باز کنه و متغییر فرم رو true کنه و هنگام بستن هم اون false کنه.

البته خودم امتحان نکردم ها! :لبخند:
اگر مشکل داشت اساتید بگن.

mehrdad1991h
سه شنبه 28 شهریور 1391, 15:27 عصر
ميخواد با يه دكمه همه فرمهاي باز برنامه رو ببنده بجز فرم اصلي.
و اينكه اگر كاربر يه فرمي رو باز كرد كه قبلا باز شده بود ازش شي نسازه مستقيم همونو باز كنه. درست متوجه شدم آقاي مهرداد؟


برای مسئله ی دوم هم می تونن به تعداد فرمها متغییر bool تعریف کنن (مثلا تو کلاس)و هنگام باز کردن چک کنه که اسم فرم true هست یا نه ؛ اگر نبود فرمرو باز کنه و متغییر فرم رو true کنه و هنگام بستن هم اون false کنه.

البته خودم امتحان نکردم ها! :لبخند:
اگر مشکل داشت اساتید بگن.


دقیقا همینه
منتها راه حلش را خودم خیلی فک کردم فقط به همون متغیر bool رسیدم ولی از اونجا که نمیتونم تشخیص بدم چه تعداد فرم باز هست نمیتونم راه حلی برای بستن همه به جز فرم اصلی پیدا کنم (البته همه ی فرم ها تکراری هستن (از 2 فرم اول شی ساخته میشه همش))

ehsan7007
سه شنبه 28 شهریور 1391, 15:33 عصر
با if چک کن ببین کدوم فرم ها بازن ، فقط اونها رو ببند.

mehrdad1991h
سه شنبه 28 شهریور 1391, 15:45 عصر
با if چک کن ببین کدوم فرم ها بازن ، فقط اونها رو ببند.

اخه من چجوری بگم که بفهمین میخوام چی کار کنم
اقا مثلا فرم 2 را با کلیک روی یک دکمه 10 بار بازش میکنم (از فرم 2 10 بار نمونه میسازه دیگه که 10 بار باز میشه) ، الان میخوام هر 10 تاش با هم بسته بشه (حالا بگیرین من نمیدونم چه تعداد از این فرم باز شده..)
الان شد ؟

ehsan7007
سه شنبه 28 شهریور 1391, 15:50 عصر
این دستور 10 بار تکرار میشه :
Application.OpenForms["Form2"].Close();

درست شد؟!

mehrdad1991h
سه شنبه 28 شهریور 1391, 15:54 عصر
این دستور 10 بار تکرار میشه :
Application.OpenForms["Form2"].Close();

درست شد؟!

بابا من دارم میگم تعداد 10 بار را از کجا باید بفهمه ...
مثلا اگه 11 بار باز کرده بودم چی ؟
من تو پیدا کردن این تعداد مشکل دارم تعداد کاملا متغیره
الان راه حلی هست ؟

ehsan7007
سه شنبه 28 شهریور 1391, 16:00 عصر
دوست عزیزم! دوست گلم ! دوست خوبم !
یه متغییر تعریف کن و هنکام باز کردن یکی بهش اضافه کن ، هنگام بستن به تعداد اون تکرار کن!!!

حالا درست شد دیگه انشاءالله؟!

mehrdad1991h
سه شنبه 28 شهریور 1391, 16:13 عصر
دوست عزیزم! دوست گلم ! دوست خوبم !
یه متغییر تعریف کن و هنکام باز کردن یکی بهش اضافه کن ، هنگام بستن به تعداد اون تکرار کن!!!

حالا درست شد دیگه انشاءالله؟!
جدی چقدر خنگ بودم :):قلب:

danialafshari
سه شنبه 28 شهریور 1391, 16:19 عصر
میتونی برای هر فرم یک Public در کلاس بزاری و وقتی فرم باز شد متغیر برابر True بشه

ali_habibi1384
سه شنبه 28 شهریور 1391, 16:34 عصر
اخه من چجوری بگم که بفهمین میخوام چی کار کنم
اقا مثلا فرم 2 را با کلیک روی یک دکمه 10 بار بازش میکنم (از فرم 2 10 بار نمونه میسازه دیگه که 10 بار باز میشه) ، الان میخوام هر 10 تاش با هم بسته بشه (حالا بگیرین من نمیدونم چه تعداد از این فرم باز شده..)
الان شد ؟
دوست عزيز 10 صفحه ديگه هم كه تاپيك بزنيد و هي توضيح بديد براي كسي كه بلد نيست فايده نداره. سوال شما همون اول مشخص بود چيه منتها همونطور كه قبلا گفتم هدف بالابردن تعداد پستهاست نه پسخ صحيح به كاربران. حالا پاسخ شما:
اول اينكه كاري كه ميخواي بكني اصولي نيست اما حالا چون اصرار ميكني باشه.
هربار كه ميخواي فرمي رو باز كني نام فرم رو توي يك آرايه از رشته ها بريز . اينجوري ليستي از فرمهاي باز رو داريد .
حالا تصميم گيري راحت شد. وقتي قراره فرمي باز بشه در ليست فرمهاي باز جستجو ميكني اگر فرم باز بود ديگه ازش شي نميسازي فقط اونو مياري بالا و اگر نبود ميتوني شي بسازي و سپس نامش رو در ليست فرمهاي باز قرار بدي.
براي بستن هم به همين صورت ليست همه فرمهاي باز رو داري و همه رو ميتوني ببندي . درضمن هر فرمي كه بسته ميشه بايد از ليست فرمهاي باز حذف بشه. اين ساده ترين راه حلي بود كه به ذهن قراضه من رسيد حالا بگذريم از اينكه اصولي هست يا نه.
كد باز و بسته بودن رو هم كه قبلا بهت گفتم

ehsan7007
سه شنبه 28 شهریور 1391, 16:43 عصر
اقای حبیبی ، ممنونم از شما.
اگه از نظر شما من نمی فهمم ، من معذرت میخوام ، از بی تجربگی و کم سنیمه.


همونطور كه قبلا گفتم هدف بالابردن تعداد پستهاست نه پسخ صحيح به كاربران.
یادم میاد یه روزی ، یکی همین حرف رو به شما زد ، و شما در پاسخ گفتی :

تعداد پست ها زیادبشه که چی؟ به کجا برسم.

در هر صورت اگه اشتباهی کردم من از شما معذرت می خوام.

Mahmoud.Afrad
سه شنبه 28 شهریور 1391, 19:50 عصر
همه چی با همون Application.OpenForms که آقای جبیبی گفتند حل میشه نیازی به این همه پست نبود. فقط کافیه با یک حلقه این کارو انجام بدید تا هر تعداد نمونه ای که از یک فرم ساخته شده را ببندید.
مثلا برای بستن همه نمونه های فرم2:
foreach (Form frm in Application.OpenForms)
{
if (frm is Form2)
{
frm.Close();
}
}


اما اینکه برای رفت و برگشت ، مدام از فرم ها نمونه بسازید درست نیست و با کد پست 6 میتونید فرمهای hide شده رو show کنید.

برای اینکه از هر فرم هم فقط یک نمونه ایجاد بشه هم به صورت زیر انجام بدید :
if (Application.OpenForms["Form2"] == null)
{
Form2 frm = new Form2();
frm.Name = "Form2";
frm.Show();
}
else
{
Application.OpenForms["Form2"].Show();
Application.OpenForms["Form2"].Activate();
}
برای نمایش هر فرمی نام فرم را جایگذین Form2 کنید