[英]Winform Forms Closing and opening a new form
1. frmHome frm = new frmHome();
frm.Show();
this.Close();
我正在從LoginForm
打開HomeForm
。 在LoginForm
的form_closed
事件中,我調用Application.Exit()
。 這允許您通過單擊X
按鈕打開LoginForm
並退出應用程序。
問題是當我從LoginForm
移動到HomeForm
並調用this.Close()
, LoginForm
的form_closed
事件觸發並且應用程序被關閉。
我被允許一次只顯示一個表格。
您可以在LoginForm
使用布爾值(全局變量)作為退出標志
將其初始化為:
exit = true;//in constructor
關閉前將其設置為false:
frmHome frm = new frmHome();
frm.Show();
exit = false;
this.Close();
並在form_closed
:
if(exit) Application.Exit();
如果用戶使用'X'
按鈕關閉表單,則exit
將具有值true
,並且將調用Application.Exit()
。
以上操作無效,因為LoginForm
是Application.Run(loginForm)
使用的主要表單。
2意見建議:
帶exit
標志:
更換
Application.Run(new LoginForm())
通過
LoginForm loginFrm = new LoginForm();
loginFrm.Show();
Application.Run();
沒有exit
標志:
在您當前的代碼中替換:
frmHome frm = new frmHome();
frm.Show();
this.Close();
通過
frmHome frm = new frmHome();
this.Visible = false;
frm.ShowDialog();
this.Close();
在program.cs中:
void Main() {
frmLogin fl = new frmLogin();
if (fl.ShowModal() == DialogResult.Ok) {
frmHome fh = new frmHome();
fh.Show();
}
}
試着它可以幫到你
frmHome frm = new frmHome();
this.hide()
frm.ShowDialog();
this.Close();
所有你需要做的就是它關閉2個表格沒有問題。 Form1 fin = new Form1(); fin.Close(); this.Visible = false; Form2 win = new Form2(); win.Visible = true;
你可以強制表單隱藏,而不是關閉。 而不是捕獲form_closed事件,捕獲form_closing事件。 看起來像這樣。
private void LoginFrm_Closing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
frmHome frm = new frmHome();
frm.Show();
}
這將保持開放,但只有一個可見。 frmHome中的某個地方,可能是一個用於保存LoginFrm的公共變量,因此您可以使用Hide()在兩者之間切換; 和Show(); (以及您可能希望添加的任何其他表格)
編輯:語法。
實現此目的的一種方法:
為什么不停止在form_closed事件中調用application.exit?
無論如何我不確定你真的需要它,如果你這樣做,你可以從屏幕上刪除x圖標並給它們一個關閉按鈕。
或者,事件args中有一個CloseReason,它將告訴您是否是關閉表單或代碼的用戶。
我不太清楚我是否理解這一點,如果你想循環一個特定的表單順序,也許你可以這樣做:(偽代碼)
Dim formsList as New List(Of form)
formsList.add(Form1)
formsList.add(Form2)
formsList.add(Form3)
' etc etc etc '
For Each f as Form in formsList
f.ShowDialog()
' you could have a condition here which breaks the for loop perhaps '
Next
Me.close ' close the app '
你可以在For循環中添加一個條件,它將for循環打破到早期結束...
注意:抱歉vb.net代碼......但它應該很容易理解
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.