-
روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
با سلام
غالبا اگر بخواهم فرمی رو close کنم و فرم بعدی رو فراخوانی کنم از این کد استفاده میکنم:
this.Hide();
Form2 f = new Form2();
f.ShowDialog();
this.Close();
همیشه این کد منو به شک مینداخت که آیا فرم 1 بسته شد یا!!؟؟؟
در حالی که همیشه معتقد بودم نه فرم 1 بسته نشده و فقط hide شده اما خودم را با کدهای اکثر دوستان قانع میکردم که این روش واقعا درسته!!!!!!!!!!!!!!!
دیشب داشتم برنامه ای مینوشتم که یه پروسه زمان بری مشغول به کار بود. لازم بود فرم 1 در همان لحظه بسته بشه و فرم 2 اجرا بشه. وقتی دستور بالا رو نوشتم سرعت برنامه به طرز افتضاحی کاسته شد.!!!!!!!!!!
اونجا بود که گفتم نه واقعا کد بالا فقط فرم رو hide میکنه. روش اصولی بستن فرم نیست.
گشتم و کد زیر رو پیدا کردم.
این تکه کد دقیقا فرم 1 رو همون لحظه می بنده و فرم 2 مجددا اجرا میشه.
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Thread mythread = new System.Threading.Thread(new System.Threading.ThreadStart(OpenNewFrom));
mythread.Start();
this.Close();
}
public static void OpenNewFrom()
{
Application.Run(new Form2 ());//Create an instance of your new form. No need to call show method.
}
}
منبع:
http://www.dotnetspider.com/forum/23...plication.aspx
خواستم نظر دوستای دیگم رو بدونم؟
موفق باشید.
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
this.Hide();
Form2 f = new Form2();
f.ShowDialog();
this.Close();
این کد مشکلی نداره درسته ولی وقتی شما showdialog می کنید تا فرم بسه نشه خط بعدی اجرا نمیشه اگه این کد استفاده کنی این مشکلم حل میشه
Form2 f = new Form2();
f.Show();
Close();
استفاده از thread ممکنه تو cpu تک هسته ای سرعت پایین بیاره چون زمان کار cpu تقسیم میکنه به نظر من پایین اومدن سرعت اون کامپیوتر ممکنه از جایی دیگه ای باشه
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mehrsa_fr
this.Hide();
Form2 f = new Form2();
f.ShowDialog();
this.Close();
این کد مشکلی نداره درسته ولی وقتی شما showdialog می کنید تا فرم بسه نشه خط بعدی اجرا نمیشه اگه این کد استفاده کنی این مشکلم حل میشه
Form2 f = new Form2();
f.Show();
Close();
استفاده از thread ممکنه تو cpu تک هسته ای سرعت پایین بیاره چون زمان کار cpu تقسیم میکنه به نظر من پایین اومدن سرعت کامپیوتر ممکنه از جایی دیگه ای باشه
دوست عزیز میدم showdialog نمیذاره خط بعدی اجرا بشه.
اما شما تا بحال از کدی که نوشتید استفاده کردید؟
میدونید فرم 2 هرگز show نخواهد شد!!!!!!!!! چون دستور close بقدری سریع اجرا میشه که تا فرم 2 اجرا بشه اون دستور اجرا میشه و برنامه کلا بسته میشه!!!!!!
موفق باشی
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
مگه میشه استفاده نکرده باشم و بگم :متعجب:من تا حالا فقط از این روش استفاده میکردم برنامه ام بسته نمیشد
کد ها به ترتیب اجرا میشن منم تا حالا همچین مشکلی باهاش نداشتم
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mehrsa_fr
مگه میشه استفاده نکرده باشم و بگم :متعجب:من تا حالا فقط از این روش استفاده میکردم برنامه ام بسته نمیشد
کد ها به ترتیب اجرا میشن منم تا حالا همچین مشکلی باهاش نداشتم
یا سرعت کامپیوتر من خیلی بالاست یا سرعت کامپیوتر شما...
همین الان تست کن.
یه پروژه درست کن هیچی توش نباشه جز 2 تا فرم. به این روشی که فرمودید عمل کنید.
هرگز نمیزاره فرم 2 اجرا بشه!
-
1 ضمیمه
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
این پروژه دانلود کنید و تست کنید رو دستگاه من که مشکلی نداشت
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mehrsa_fr
این پروژه دانلود کنید و تست کنید رو دستگاه من که مشکلی نداشت
دوست عزیز در این روش شما همیشه یه فرم Main در حال اجرا دارید.
تو این روش اگه بخواهید فرم Main رو ببندید به مشکلی که من گفتم بر میخورید.
در برنامه هایی که در هر لحظه فقط یه فرم در حال اجرا باشه کد شما جواب نمیده.
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
بله شما فرمی که main هستو هر وقت close کنید برنامه بسته میشه چه بعدش فرم باز کنید چه نکنید شما با کد بالا در حقیقت انگار یه برنامه دیگه با این کارتون باز کردید
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mehrsa_fr
بله شما فرمی که main هستو هر وقت close کنید برنامه بسته میشه چه بعدش فرم باز کنید چه نکنید شما با کد بالا در حقیقت انگار یه برنامه دیگه با این کارتون باز کردید
شما روش دیگه ای برای بستن فرم main دارید؟
من 10 فرم دارم و نیاز دارم بعضی وقت ها فقط یه فرم ام لود بشه.
یا برنامه ای داریم اول فرم load اون اجرا میشه و بعد فرم login و بعد فرم main چه راه حلی پیشنهاد می کنید؟
موفق باشید
علی پاییزی
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
ali_autumnal
شما روش دیگه ای برای بستن فرم main دارید؟
من 10 فرم دارم و نیاز دارم بعضی وقت ها فقط یه فرم ام لود بشه.
یا برنامه ای داریم اول فرم load اون اجرا میشه و بعد فرم login و بعد فرم main چه راه حلی پیشنهاد می کنید؟
موفق باشید
علی پاییزی
ببینید شما برنامه رو میبندید و یه برنامه دیگه باز میکنید که این دفعه یه فرم دیگه برای شما نشون میده این کار اصلا اصولی نیست شما میتونید فرم اصلی hide کنید و هر وقت دوباره بهش احتیاج داشتید دوباره show کنید
باز اگه بقیه دوستان هم اگه نظری دارند بگن شاید به نتیجه ای برسیم
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mehrsa_fr
ببینید شما برنامه رو میبندید و یه برنامه دیگه باز میکنید که این دفعه یه فرم دیگه برای شما نشون میده این کار اصلا اصولی نیست شما میتونید فرم اصلی hide کنید و هر وقت دوباره بهش احتیاج داشتید دوباره show کنید
باز اگه بقیه دوستان هم اگه نظری دارند بگن شاید به نتیجه ای برسیم
من نگفتم این روش عالیه و یا اصولی!!
سوال من این بود روش اصولی بستن فرم ها و فراخوانی فرم های دیگر و در آخر هم نوشتم که منتظر نظرات دیگر دوستان هستم.
در ثانی وقتی من با فرم load یا login کاری ندارم جز اینکه فقط یکبار اجرا شدن برای چی اونها رو hide کنم که فضایی از حافظه رو اشغال کنند؟
یا اگه بخوام فرم Main رو ببندم و دوباره باز کنم اما با تغییراتی که تو setting دادم اجرا بشه. اون موقع چی؟
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
دوست عزیز میدم showdialog نمیذاره خط بعدی اجرا بشه.
اما شما تا بحال از کدی که نوشتید استفاده کردید؟
میدونید فرم 2 هرگز show نخواهد شد!!!!!!!!! چون دستور close بقدری سریع اجرا میشه که تا فرم 2 اجرا بشه اون دستور اجرا میشه و برنامه کلا بسته میشه!!!!!!
کد دوستمون درسته.
فقط شما قبل از اینکه فرم رو close کنید hide می کردید و اصلا close اجرا نمی شده.
موفق باشید.
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
اگه شما میخواید login کنید میتونید اول فرم main بگید showdialog بشه اگه colse بشه که بقیه کدای main اجرا میشن وگرنه که برنامه همین طور میمونه
من برای سوال دومتون روش به خصوصی ندارم اگه بخوام اینکارو بکنم از applicatin.restart استفاده میکنم یا از همون روش شما که گفتید
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
manij_mhm
کد دوستمون درسته.
فقط شما قبل از اینکه فرم رو close کنید hide می کردید و اصلا close اجرا نمی شده.
موفق باشید.
خواهشن پست هارو دقیق بخونید بیایید پایین بعد پاسخ بدید.
--------------------
نقل قول:
نوشته شده توسط
mehrsa_fr
اگه شما میخواید login کنید میتونید اول فرم main بگید showdialog بشه اگه colse بشه که بقیه کدای main اجرا میشن وگرنه که برنامه همین طور میمونه
من برای سوال دومتون روش به خصوصی ندارم اگه بخوام اینکارو بکنم از applicatin.restart استفاده میکنم یا از همون روش شما که گفتید
من نمیخوام فرم main بی جهت لود بشه. ترتیب مهمه واسم. زیبایی برنامه ازبین میره.
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
در هر صورت باید یه فرم یا باز باشه یا hide تا برنامه بسته نشه بعد میشه رفت سر بقیه چیز ها بحث کرد که مثلا قبل از showdialog کردن که تو خوده main فرمو hide کنی که ترتیب و زیبایی از بین نره
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mehrsa_fr
در هر صورت باید یه فرم یا باز باشه یا hide تا برنامه بسته نشه بعد میشه رفت سر بقیه چیز ها بحث کرد که مثلا قبل از showdialog کردن که تو خوده main فرمو hide کنی که ترتیب و زیبایی از بین نره
یه برنامه داریم که فقط 2تا فرم داره. هر یک از فرم ها حکم فرم Main رو داره. پروسه ها و پردازش های سنگینی در هریک در حال اجراست. آیا جهت رفتن از فرم 1 به فرم 2 مجبور به استفاده کردن از روش hide هستیم؟ نمیشه close کنیم خلاص بشیم از دست اون؟
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
ببینید تو Program.cs یه خط کد هست که هر وقت برنامه شما باز شد اول اون فرم رو نشون میده
Application.Run(newForm1());
شما هر وقت این فرمو ببندید برنامه به طور کامل بسته میشه چه شما 2 تا فرم داشته باشید که بخواید برید فرم 2 و قبلی ببندید چه 100تا
--------------------
نقل قول:
نوشته شده توسط
ali_autumnal
یه برنامه داریم که فقط 2تا فرم داره. هر یک از فرم ها حکم فرم Main رو داره. پروسه ها و پردازش های سنگینی در هریک در حال اجراست. آیا جهت رفتن از فرم 1 به فرم 2 مجبور به استفاده کردن از روش hide هستیم؟ نمیشه close کنیم خلاص بشیم از دست اون؟
تویه فرم یک یه thread بزار که این پردازش هارو انجام بده اگه رفت فرم 2 اون thread غیر فعال کن یا ببندش
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
تویه فرم یک یه thread بزار که این پردازش هارو انجام بده اگه رفت فرم 2 اون thread غیر فعال کن یا ببندش
لطفا بیشتر توضیح دهید. حتی الامکان با ذکر مثال.
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
با سلام.
دوستانی که میگن hide کنید چرا hide کنیم؟؟؟؟ من نمی گم کد این دوستمون درسته ( ولی درسته ) ولی حداقل این خوبی رو داره که فرمی که دیگه بهش نیازی نداریم دیگه در کار نیست و حذف نمیشه و فضایی رو در بر نمی گیره. من این مثال رو چند هفته پیش تو سایت خودم زدم که به نظر من این روش از hide کردن بهتره
-
1 ضمیمه
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
ali_autumnal
لطفا بیشتر توضیح دهید. حتی الامکان با ذکر مثال.
اینم یه مثال اگه جاییشو مشکل داشتی بپرس
البته باید یکم با اصول thread اشنا باشید
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
mmd2009
دوستانی که میگن hide کنید چرا hide کنیم؟؟؟؟
والا من از اول این تاپتیک داشتم می گفتم چرا hide کنیم از اون روش اول استفاده نکنید دیگه نمیتونم تکرار کنم
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نظر دیگه ای پیشنهادی نیست؟
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
ما بالاخره از کدوم استفاده کنیم؟!!!
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
مهرسا : کد شما خرابه ، چون برنامه رو کلا میبنده
اگه تردینگ بلد باشی که کار علی جان خیلی قشنگه اما کاره دیگه و سریعتر و کم حافظه تر به نظر من استفاده از اشاره گرهاست . طوری که توی فرم دوم یک اشاره گر عمومی ایستا از جنس فرم اول داشته باشیم . سپس وقتی می خوایم فرم اول رو ببندیم ، اشاره گر اون فرم دوم رو برابر با آدرس فرم اول می کنیم . سپس فرم دوم رو نشون میدیم و توی فرم لود فرم دوم ، از طریق اشاره گری که داریم به آدرس فرم اول ، متد Close اونو اجرا میکنیم . اینطوری دقیقا زمانی که فرم دوم باز میشه ، فرم اول کاملا بسته میشه . اینکار فقط یک اشاره گر 2 بایتی می خواد و از نظر حافظه هم خیلی بهینه تره .
-
1 ضمیمه
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
سلام به همه دوستان
مخفی کردن فرم اصلی دو اثر بد داره:
اول بار اضافی بر رم(شاید در فرمهای ساده به نظر نرسه ولی در فرمهای بزرگ شاید حیاتی باشه واسه)
دوم اگه فرم اصلی مخفی بشه با بستن فرم جاری برنامه از رم خارج نمیشه و باید حتما فرم اصلی بسته بشه
برای فرم لود از نخ استفاده بشه و برای فرم لاگین هم فرم اصلی رو مخفی کرده پس از اتمام کار فرم
لاگین به برنامه (فرم اصلی)برگردیم و فرم لاگینو می بندیم
کنترل برنامه دست فرم اصلیه
دوستان اینهایی که گفتم رو به صورت یک نمونه در برنامه زیر گذاشتم
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
گاهی اوقات پیش میاد که نمیخایم با بستن فرم اصلی برنامه بسته نشه (منظور اولین فرمی است که نمایش داده نمیشه)
رو پروژه راست کلیک کرده و properties را انتخاب کنبد سپس گزینه application را انتخاب
کنبد در قسمت پایین اون گزینه shutdown mode را برروی when last form closed قرار دهید
چون بنده این تاپیک (ترفندهای......) رو در تالار vb.net هم ایجاد کردم نوشته هارو کپی کردم و این نکته بالا فقط مربوط به vb.net است اگه باعث گمراهی شما شد معذرت میخام
برنامه ای که در همین تاپیک ضمیمه کردم رو دانلود کن نگاهی بهش بنداز فک کنم راه حل خوبی باشه
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
ali_autumnal
با سلام
غالبا اگر بخواهم
فرمی رو close کنم و
فرم بعدی رو فراخوانی کنم از این کد استفاده میکنم:
this.Hide();
Form2 f = new Form2();
f.ShowDialog();
this.Close();
همیشه این کد منو به شک مینداخت که آیا فرم 1 بسته شد یا!!؟؟؟
در حالی که همیشه معتقد بودم
نه فرم 1 بسته نشده و فقط hide شده اما خودم را با کدهای اکثر دوستان قانع میکردم که این روش واقعا درسته!!!!!!!!!!!!!!!
دیشب داشتم برنامه ای مینوشتم که یه پروسه زمان بری مشغول به کار بود. لازم بود فرم 1 در همان لحظه بسته بشه و فرم 2 اجرا بشه. وقتی دستور بالا رو نوشتم سرعت برنامه به طرز افتضاحی کاسته شد.!!!!!!!!!!
اونجا بود که گفتم نه واقعا کد بالا فقط فرم رو hide میکنه. روش اصولی بستن فرم نیست.
گشتم و کد زیر رو پیدا کردم.
این تکه کد دقیقا فرم 1 رو همون لحظه می بنده و فرم 2 مجددا اجرا میشه.
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Thread mythread = new System.Threading.Thread(new System.Threading.ThreadStart(OpenNewFrom));
mythread.Start();
this.Close();
}
public static void OpenNewFrom()
{
Application.Run(new Form2 ());//Create an instance of your new form. No need to call show method.
}
}
منبع:
http://www.dotnetspider.com/forum/23...plication.aspx
خواستم نظر دوستای دیگم رو بدونم؟
موفق باشید.
ممنون از شما دوست عزیز کاملا درسته با این کد فرم دوم به عنوان فرم اصلی معرفی میکنه و فرم یکو میبنده
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
میشد تو فرم بعدی این کارو انجام داد
Application.OpenForms["splash"].Close();
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
من این کد رو امتحان کردم اوکیه ، چون وقتی فرم های قبلی باز میشد . در build کردن دفعات بعدی خطا میداد ، که در کد های قبلی که تست کردم این مشکل بود مخصوصا وقتی hide میکنی ولی این کد اوکی هست برای سوییچ کردن بین کد ها
:تشویق:
System.Threading.Thread mythread = new System.Threading.Thread(new System.Threading.ThreadStart(OpenMain));
mythread.Start();
this.Close();
public static void OpenMain()
{
Application.Run(new mainFrm());//Create an instance of your new form. No need to call show method.
}
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
سلام دوستان
البته من روش بهتری دارم که نه نیازی به Hide کردن داره و نه بخواد نخ بزنی.
شما اول بیاید فرم اصلی رو مین کنید.( Application.Run(new formmain());)
حالا توی لود formmain این کد رو بزنید تا فقط یکبار با حلقه for اجرا بشه
for(int i = 1; i < 2; i++)
{
this.Hide();
new loginform().ShowDialog();
}
this.Show();
خب حالا تو فرم لاگین توی اون قسمت از شرط که نام کاربری و رمز عبور درست بود نتیجه رو بزنید: this.Close();
با این کار فرم لاگین بسته میشه و فرم مین از حالت Hide بیرون میاد.
-
نقل قول: روش اصولی بستن فرم ها و فراخوانی فرم های دیگر
نقل قول:
نوشته شده توسط
barnamenevispro
سلام دوستان
البته من روش بهتری دارم که نه نیازی به Hide کردن داره و نه بخواد نخ بزنی.
شما اول بیاید فرم اصلی رو مین کنید.( Application.Run(new formmain());)
حالا توی لود formmain این کد رو بزنید تا فقط یکبار با حلقه for اجرا بشه
for(int i = 1; i < 2; i++)
{
this.Hide();
new loginform().ShowDialog();
}
this.Show();
خب حالا تو فرم لاگین توی اون قسمت از شرط که نام کاربری و رمز عبور درست بود نتیجه رو بزنید: this.Close();
با این کار فرم لاگین بسته میشه و فرم مین از حالت Hide بیرون میاد.
اگه طرف بدون اینکه یوزر و پسورد رو وارد کنه فرم لاگین رو ببنده که همینجوری فرم اصلی نمایش داده میشه و بهش خوشامد میگی
و اینکه اصلا نقش اون حلقه for چیه؟