簡體   English   中英

Winform Forms關閉並打開一個新表單

[英]Winform Forms Closing and opening a new form

1. frmHome frm = new frmHome();
   frm.Show();
   this.Close();

我正在從LoginForm打開HomeForm LoginFormform_closed事件中,我調用Application.Exit() 這允許您通過單擊X按鈕打開LoginForm並退出應用程序。

問題是當我從LoginForm移動到HomeForm並調用this.Close()LoginFormform_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()

編輯:

以上操作無效,因為LoginFormApplication.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(); (以及您可能希望添加的任何其他表格)

編輯:語法。

實現此目的的一種方法:

  1. 在啟動時打開主窗體。
  2. 把它藏起來。 (可選,但如果您真的無法顯示多個表單,則不適合您。)
  3. 使用ShowDialog()打開您的登錄表單;
  4. 如果登錄成功,則顯示您的主表單。 如果沒有,請關閉主表單/應用程序。

為什么不停止在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM