PDA

View Full Version : سوال: بستن فرم باز بعد از باز کردن فرم جدید



armsoftpc
دوشنبه 18 دی 1391, 18:43 عصر
سلام
فرض کنید، یه فرم لاگین داریم کاربر بعد از این که دکمه ورود رو زد و تائید شد، می خوام که فرم ورود بسته شود و فرم جدید f2 باز شود.
اما وقتی با ()f2.ShowDialog فرم رو باز می کنیم فرم یک بسته نمی شود و زیر فرم 2 می ماند.:متفکر:

SHD.NET
دوشنبه 18 دی 1391, 19:35 عصر
اگه فرم لوگین به عنوان فرم مادر نیست (یعنی همون فرم اصلی) میتونی با دستور Close اونو ببندین .
اگر هم به عنوان فرم اصلیه با دستور Hide میتونید این کار بکنید

:چشمک:\\\موفق باشید///:چشمک:

armsoftpc
سه شنبه 19 دی 1391, 22:54 عصر
سلام

اگه فرم لوگین به عنوان فرم مادر نیست (یعنی همون فرم اصلی) میتونی با دستور Close اونو ببندین .
از سوال معلومه که فرم مادر است.(فرمی که در فایل Program.cs به عنوان اولین فرم ران میشود.)

اگر هم به عنوان فرم اصلیه با دستور Hide میتونید این کار بکنید
اونوقت با این کار منابعی از سیستم که فرم می گیرد، از بین نمی رود که. و بی خودی حافظه را مشغول می کند.
راه دیگری سراغ ندارید.(شما یا دوستان):متفکر:

mehrdad1991h
سه شنبه 19 دی 1391, 23:02 عصر
سلام

از سوال معلومه که فرم مادر است.(فرمی که در فایل Program.cs به عنوان اولین فرم ران میشود.)

اونوقت با این کار منابعی از سیستم که فرم می گیرد، از بین نمی رود که. و بی خودی حافظه را مشغول می کند.
راه دیگری سراغ ندارید.(شما یا دوستان):متفکر:

خوب از حالت فرم مادر درش بیار
بعد اول برنامه که باز میشه اونا نمایش بده اگر اوکی بود اینا ببند و فرم اصلی را نمایشش بده در غیر این صورت هم برنامه را ببندش کلا

روش دیگه این که همه این کارا را روی یک فرم انجام بدی
در فرمی که داری همه چیزا را مخفی کن و وقتی یوزر لاگین کرد قسمت لاگین را یا مخفی کن یا دیسیبلش کن و بقیه را نشونش بده(اگه برنامه ات کوچیکه از همین روش استفاده کن ، منم از همین روش استفاده میکردم)

armsoftpc
سه شنبه 19 دی 1391, 23:12 عصر
بعد اول برنامه که باز میشه اونا نمایش بده اگر اوکی بود اینا ببند و فرم اصلی را نمایشش بده در غیر این صورت هم برنامه را ببندش کلا
متوجه نشدم، چی شد.

سعید کشاورز
سه شنبه 19 دی 1391, 23:37 عصر
از این دستور استفاده کن ..

this.Visible = false;
frmMainOffice fmMain = new frmMainOffice();
fmMain.ShowDialog();
this.Close();

ashkan.comp
چهارشنبه 20 دی 1391, 01:54 صبح
دوست عزیز نمونه کامل این کد رو تو آموزشم گذاشتم نمونه برنامه اش هم هست حتما نگاش کن کارتو را میندازه
http://barnamenevis.org/showthread.php?378153-بستن-فرم-فعلی-و-نمایش-فرم-بعدی&p=1671800#post1671800

alireza.zahani
چهارشنبه 20 دی 1391, 03:31 صبح
از این دستور استفاده کن

;() this.Dispose

danialafshari
چهارشنبه 20 دی 1391, 04:06 صبح
سلام


دوست عزیز نمونه کامل این کد رو تو آموزشم گذاشتم نمونه برنامه اش هم هست حتما نگاش کن کارتو را میندازه
http://barnamenevis.org/showthread.php?378153-بستن-فرم-فعلی-و-نمایش-فرم-بعدی&p=1671800#post1671800

این که Show هست و به قول خودشون منابعی از سیستم رو میگیره


از این دستور استفاده کن

;() this.Dispose

این هم که کلا فرم رو میبنده


از این دستور استفاده کن ..
1
2
3
4
this.Visible = false;
frmMainOffice fmMain = new frmMainOffice();
fmMain.ShowDialog();
this.Close();


با همین کد کارتون راه میوفته
موفق باشید

armsoftpc
چهارشنبه 20 دی 1391, 16:40 عصر
سلام

از این دستور استفاده کن ..
1
2
3
4
this.Visible = false;
frmMainOffice fmMain = new frmMainOffice();
fmMain.ShowDialog();
this.Close();


این مورد همون طور که danialafshari عزیز گفت کار میکند، اما باز هم منابع آزاد نمی شود و تقریبا هیچ فرقی با دستور Hide ندارد، وقتی در انتها می بندیمش، یعنی موقع کار با فرم اصلی هنوز این فرم لاگین باز است.
چه کار کنیم که فرم لاگین بعد از ورود به طور کامل بسته و فرم اصلی باز شود؟:متفکر:

Mahmoud.Afrad
چهارشنبه 20 دی 1391, 19:00 عصر
در یک thread جدید فرم دیگر را ران کنید و فرم فعلی را با خیال راحت ببندید:

private void button3_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(showForm2));
t.Start();
this.Dispose();
}
private void showForm2()
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
}

سعید کشاورز
چهارشنبه 20 دی 1391, 19:00 عصر
سلام

این مورد همون طور که danialafshari عزیز گفت کار میکند، اما باز هم منابع آزاد نمی شود و تقریبا هیچ فرقی با دستور Hide ندارد، وقتی در انتها می بندیمش، یعنی موقع کار با فرم اصلی هنوز این فرم لاگین باز است.
چه کار کنیم که فرم لاگین بعد از ورود به طور کامل بسته و فرم اصلی باز شود؟:متفکر:
ببین اون چیزی که من فهمیدم الان فرم اول به طور کلی بسته میشه..میدونی چرا؟ چون اگه به طور کامل بسته نمیشد اونوقت اگه فرم 2 رو ببندی ، برنامه نباید Stop بشه..
الان با این دستور وقتی برنامه رو از فرم 2 میبندی به طور کلی بسته میشه برنامه ...ولی اگه فرم 1 رو Hide کنی و بعد فرم 2 رو Show کنی و اونوقت فرم 2 رو ببندی اینجاست که میبینی برنامه کلا بسته نمیشه ..یعنی اینکه فرم 1 هنوز در حال اجراست..
باز هم دوستان بیان نظر بدن..شاید من اشتباه میکنم

danialafshari
چهارشنبه 20 دی 1391, 19:16 عصر
در یک thread جدید فرم دیگر را ران کنید و فرم فعلی را با خیال راحت ببندید:

private void button3_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(showForm2));
t.Start();
this.Dispose();
}
private void showForm2()
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
}


این کدهم با تغییر کوچکی کار میده و میتونی در Task هم ببینی که فضای فرم1 رو آزاد میکنه
public void show()
{
Form frm2 = new Form2();
frm2.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(show));
t.Start();
this.Dispose();
}
موفق باشی

Mahmoud.Afrad
چهارشنبه 20 دی 1391, 19:51 عصر
از این دستور استفاده کن ..

this.Visible = false;
frmMainOffice fmMain = new frmMainOffice();
fmMain.ShowDialog();
this.Close();

ببین اون چیزی که من فهمیدم الان فرم اول به طور کلی بسته میشه..میدونی چرا؟ چون اگه به طور کامل بسته نمیشد اونوقت اگه فرم 2 رو ببندی ، برنامه نباید Stop بشه..
الان با این دستور وقتی برنامه رو از فرم 2 میبندی به طور کلی بسته میشه برنامه ...ولی اگه فرم 1 رو Hide کنی و بعد فرم 2 رو Show کنی و اونوقت فرم 2 رو ببندی اینجاست که میبینی برنامه کلا بسته نمیشه ..یعنی اینکه فرم 1 هنوز در حال اجراست..
باز هم دوستان بیان نظر بدن..شاید من اشتباه میکنم

اشتباه میکنید.
چون با رسیدن به دستور ShowDialog دستورات بعدی انجام نمیشن مگر اینکه فرم دوم(fmMain) بسته بشه پس با نمایش فرم2 منابع فرم1 هنوز آزاد نشده. اینی هم که میبینید فرم قبلی دیده نمیشه به خاطر اینه که Visible را false کردید. وقتی فرم2 بسته شد اونوقت this.Close() باعث میشه فرم1 هم بسته بشه. در این کد بسته شدن فرم1 وابسته به بسته شدن فرم2 هست.
در صورتی که خواسته این هست که منابع فرم1 آزاد بشه در حالی که فرم2 باز هست. همونطور که مثال زدم با ترد این کار شدنی هست.

SEZAR.CO
شنبه 07 بهمن 1391, 21:19 عصر
با عرض سلام
اگه ما 3 تا فرم داشته باشیم
که فرم2 بعد از 10 ثانیه باز شه و فرم 1 بسته و بعد از 10 ثانیه فرم 3 بازشه و فرم2 بسته شه
اگه میشود کمکم کنید و بگویید باید چکار کنم
با تشکر

SEZAR.CO
یک شنبه 08 بهمن 1391, 15:17 عصر
کسی منظورم را نفهمیده یا.........

SEZAR.CO
سه شنبه 10 بهمن 1391, 01:18 صبح
کسی نیست نظری بده

sasan_22
سه شنبه 10 بهمن 1391, 12:19 عصر
دوست عزیز هر وقت بحث زمان میاد از تایمر استفاده کن منطق سوال تو به این صورت میشه
1- فرم اول نمایش داده شده و تایمر (که interval اون 1 ثانیه است) رو استارت کن
2- به 10 ثانیه که رسید تایمر استوپ شه و فرم2 show و فرم 1 hide یا dispose شه
و به همین صورت