PDA

View Full Version : حرفه ای: بستن تمامی فرم های باز به جز یک فرم خاص



رامین مرادی
شنبه 25 آذر 1396, 08:24 صبح
وقت بخیر دوستان من با کد زیر تمامی فرم های باز برنامه رو میبندم. اما قبل از بستن فرم لاگین رو باز میکنم و تو شرط بستن هم اعلام میکنم اگه فرم لاگین بود نبنده اما از برنامه خارج میشه. برک پوینت هم گذاشتم اجراش درسته ولی نمیدونم چرا از برنامه خارج میشه .اینم کد هامه


LoginFrm _LoginFrm = new LoginFrm();
_LoginFrm.Show();
List<Form> openForms = new List<Form>();
foreach (Form f in Application.OpenForms)
openForms.Add(f);
foreach (Form f in openForms)
{
if (f.Name != "LoginFrm")
f.Close();
}


کجای کارم اشتباهه؟

رامین مرادی
شنبه 25 آذر 1396, 08:57 صبح
اشکال کارمو پیدا کردم. گفتم بگم شاید برا بقیه هم لازم شد

توی رویداد کلوزینگ فرم اصلییم از

Application.Exit();

استفاده کرده بودم که باعث خروج از برنامه میشد کد کامل رویداد به شکل زیر بود

private void MainFrm_FormClosed(object sender, FormClosedEventArgs e)
{
HistoryDA _HistoryDA = new HistoryDA();
_HistoryDA.Logined(this.lblPId.Text + this.lblIp.Text, "LOGOUT");
OnlineUserDA _OnlineUserDA = new OnlineUserDA();
_OnlineUserDA.Delete(lblPId.Text);
Application.Exit();
}


که به صورت زیر اصلاح کردم.


private void MainFrm_FormClosed(object sender, FormClosedEventArgs e)
{
bool locking=true;
List<Form> openForms = new List<Form>();

foreach (Form f in Application.OpenForms)
openForms.Add(f);

foreach (Form f in openForms)
{
if (f.Name == "LoginFrm")
locking = false;
}

if (locking)
{
HistoryDA _HistoryDA = new HistoryDA();
_HistoryDA.Logined(this.lblPId.Text + this.lblIp.Text, "LOGOUT");
OnlineUserDA _OnlineUserDA = new OnlineUserDA();
_OnlineUserDA.Delete(lblPId.Text);
Application.Exit();
}
else
{
HistoryDA _HistoryDA = new HistoryDA();
_HistoryDA.Logined(this.lblPId.Text + this.lblIp.Text, "LOGOUT");
OnlineUserDA _OnlineUserDA = new OnlineUserDA();
_OnlineUserDA.Delete(lblPId.Text);
}
}


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

parvizwpf
شنبه 25 آذر 1396, 13:56 عصر
روی HashCode آبجکت ها هم یه مطالعه ای کنید. کمک میکنه

رامین مرادی
شنبه 25 آذر 1396, 14:15 عصر
روی HashCode آبجکت ها هم یه مطالعه ای کنید. کمک میکنه

مطلب خاصی پیدا نکردم. اگه امکان داره لینکی معرفی کنید.

parvizwpf
شنبه 25 آذر 1396, 14:57 عصر
در واقع هر ابجکتی در سی شارپ حاوی یک هش کد هست. شما وقتی کد مینویسید و جلوی آبجکت نقطه میزارید متدی میاد بنام GetHashCode();
این کد برای هر آبجکت یونیک هست . چون معمولا استرینگ ها توی چک کردن، چیزهای مطمئنی نیستند میتونید بعنوان جایگزین از هش کد هر فرم استفاده کنید.