PDA

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



hojjat_gh
دوشنبه 21 اردیبهشت 1388, 12:59 عصر
با سلام
form1 برنامه ی من فرم اصلی برنامست و تمام فرم ها زیر از طریق اون فرم صدا زده میشند
از جمله فرم logo(که در هنگام ران برنامه ظاهر میشه)و فرم login(که یوزر و پسورد رو از کاربرمیگیره )
و زمانی که کاربر سه دفعه پسورد رو اشتباه وارد کنه برنامه بسته میشه واسه این کار از دستور
application.exitthread();
استفاده کردم حالا مشکل اینجاست
چون اون دو فرم بالاداخل form1 صدا زده میشندزمانی که برنامه در حال بسته شدنه یه لحظه در حد یه چشمک برنامه form1 رو نشون میده وبعد برنامه بسته میشه حالا من چطوری میتونم چشمک زدن form1 رو از بین ببرم
با تشکر

captain_black81
دوشنبه 21 اردیبهشت 1388, 14:59 عصر
اول form1_Load
form1.visible رو false کنید
بعد login رو باز کنید

Reza_Yarahmadi
دوشنبه 21 اردیبهشت 1388, 17:26 عصر
میتونی فرم اول برنامه ات رو به فرم لوگین تغییر بدی


Application.Run(new Login());

توی رویداد لوگین هم ظاهر شدن موقت لوگو رو بذار.
این طوری دیگه Form1 رو توی فرم لوگین میتونی صدا یزنی و ....
موفق باشید

NewFoxStudent
دوشنبه 21 اردیبهشت 1388, 18:43 عصر
روش دوم که Reza_Yarahmadi گفتن روش معقولی و مزایای دیگه ای هم داره

hojjat_gh
دوشنبه 21 اردیبهشت 1388, 19:55 عصر
با سلام
ضمن تشکر از همه دوستان ولی روش دوستمون تو پست 3 جواب داد ولی زمانی که برنامه شامل حداقل یه کاربر از قبل تعریف شده باشه
ولی من میخوام اگه مدیر هیچ کابری رو تعریف نکرد فرم لوگین ظاهر نشه و مستقیم به فرم 1 بره
چکار باید بکنم
روش پست

NewFoxStudent
دوشنبه 21 اردیبهشت 1388, 20:15 عصر
میتونی این مسئله رو توی شروع برنامه چک کنی و اگه کاربری وجود نداشت فرم اول رو نمایش بدی و اگه داشت فرم لوگین رو

hojjat_gh
سه شنبه 22 اردیبهشت 1388, 00:28 صبح
میتونی این مسئله رو توی شروع برنامه چک کنی و اگه کاربری وجود نداشت فرم اول رو نمایش بدی و اگه داشت فرم لوگین رو
من کد چک کردن رو هم تو فرم لود فرم لاگین ریختم وهم زیر intialized ولی در هر دوحالت فرم1 با فرم لوگین با هم ظاهر میشند من کد زیر رو در حالت نبود کاربر نوشتم:


this.hide();
form1 f=new form1();
f.show();

چون میدونی که چون لاگین فرم اصلیه اگه کلوزش کنم برنامه بسته میشه پس مجبورم هایدش کنم

hsmfaridmehr
سه شنبه 22 اردیبهشت 1388, 01:12 صبح
من ی چیزی شبیه این کد رو توی Main برنامه هام مینویسم



[STAThread]
staticvoid Main()
{
bool isExist=false;
int _wrongPass=0;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, "", out isExist);
if (isExist)
{
again:
frmLogin login = newfrmLogin();
DialogResult dialogResult = login.ShowDialog();
if (dialogResult == DialogResult.OK && login.CanEnter)
{
Application.Run(newfrmMain());
}
elseif (dialogResult == DialogResult.Cancel)
{
Application.Exit();
}
elseif (_wrongPass < 3)
{
_wrongPass++;
login.Dispose();
goto again;
}
}
else
{
//Do something
return;
}
}


که اول چک میکنم برنامه قبلا اجرا شده یا نه و در فرم لاگین هم یک خصوصیت هست که در صورت درست
بودن نام کاربری و کلمه عبور true میشه و در صورتی که کاربر ورود رو بزنه که dialogresult اون رو
برابر ok کردم و CanEnter هم true باشه فرم اصلی رو run میکنم در غیر ایصورت اگه خروج رو بزنه که dialogresult اون برابر cancel برنامه رو خارج می کنم و اگر هم نام کاربری و کلمه عبور درست نباشه دو باره فرم لاگین رو نشون میده البته این کد کامل نیست نسبت به نیازت کاملش کن

Reza_Yarahmadi
سه شنبه 22 اردیبهشت 1388, 01:18 صبح
توی این حالت به جای show کردن Form1 بهتره اونو ShowDialog کنی بعد دستور بستن پنجره لوگین رو بنویسی و یا کد نمایش فرم1 و مخفی شده لوگین رو توی رویداد Activated بنویسی


private void Login_Load(object sender, EventArgs e)
{
..
..
..
Form1 f1 = new Form1();
f1.ShowDialog();
this.Close();
}

و یا


private void Login_Activated(object sender, EventArgs e)
{
..
..
..
Form1 f1 = new Form1();
f1.Show();
this.Hide();
}

پیشنهاد من روش اوله چون روش دوم همون مشکل چشمک زدن رو داره!!

hojjat_gh
سه شنبه 22 اردیبهشت 1388, 17:08 عصر
نتیجه گیری تاپیک و چند نکته:
-این کد رو میشه تو همه فرم ها نوشت و اون فرم رو فرم اصلی برنامه کرد که در اینجا form1 فرم اصلی برنامست:
Application.Run(new form1());

-برا بستن یه فرم ونمایش یه فرم دیگه حتما از دستور showdialog به جای show استفاده کنید
-برا نمایش ندادن فرمی اگه فرم اصلی برنامه باشه باید از
this.hide();
استفاده کنیم نه از
this.close();

روش دوم که Reza_Yarahmadi گفتن روش معقولی و مزایای دیگه ای هم داره
دوست عزیز میشه چند تا از مزیتهای اون رو بگید

Reza_Yarahmadi
سه شنبه 22 اردیبهشت 1388, 19:41 عصر
Application.Run(new form1());

دوست عزیز این کد رو باید در کلاس Program بنویسی نه توی کلاس فرمها!



برا بستن یه فرم ونمایش یه فرم دیگه حتما از دستور showdialog به جای show استفاده کنید

این یه حالت استثنا بود، فقط برای کاری که شما میخواستید استفاده داره اونم به دلیل اینکه اگه فرم لاگین رو به عنوان فرم اصلی قرار بدید نمیشه اونو Close کرد چون برنامه کلا بسته میشه و گرنه برای حالات معمولی همون show مفایت میکنه.

kiarayan
پنج شنبه 01 مرداد 1388, 01:06 صبح
به نظر من هم باز کردن فرم اصلی بعد از فرم لوگین نباید ShowDialog باشه ! باید Show باشه و هنگام لود فرم اصلی برنامه چک کنیم اگر فرم لوگین باز است ابتدا اون بسته بشه سپس فرم اصلی باز بشه !
موفق و پیروز باشید

sd.CSharpProgrammer
پنج شنبه 01 مرداد 1388, 13:31 عصر
سلام

ميتوني قبل اينكه برنامه رو ببندي opacity فرم1 رو صفر كني كه با اينكار هم نيازي به visible = false نيست و هم فرمت ديگه چشمك نميزنه. البته اين راه بيشتر يك ميانبر يا دور زدن هست و روش visible اصولي تره ولي چون قصدت خروج از برنامه هست اين روش جواب ميده

موفق باشي