簡體   English   中英

如何在c#中的另一個表單中打開一個新窗口表單

[英]How to open a new window form within another form in c#

我用c#開發了一個Windows窗體應用程序。

它有2種形式,如登錄表單和主表單。 當我輸入正確的登錄憑據時,它應該關閉(不隱藏)登錄表單並顯示主表單。

我使用以下代碼

MainForm main=new MainForm();
this.hide();//close login form
main.show();//display main form

但是當我使用mdi容器中十字標記(右上角)關閉主窗體時,主窗體關閉但應用程序仍在任務管理器中運行。

如果我使用以下代碼而不是以前的代碼,應用程序將在主窗體顯示之前關閉。

this.close()//close login form
main.show();//display main form

我是否必須從主窗體中隱藏mdi容器,或者有任何方法可以實現此目的嗎? 請幫忙。

試試這樣:

this.Hide();
Main.ShowDialog();
this.Close();

首先,隱藏登錄表單。 接下來,顯示“主窗體”對話框,但阻止“ShowDialog()”的調用者繼續,直到關閉對話框。 最后,關閉對話框后,關閉登錄表單,結束應用程序。

應用程序仍在運行,因為您仍然有一個仍處於活動但隱藏的表單。

您可以在MainForm中訂閱Close事件,並通過Application.Exit()手動退出應用程序

另一種選擇是確保只有一個窗口存活:在LoginForm.Close事件的處理程序中打開MainForm ,如下所述: Windows窗體:在運行時更改應用程序主窗口

MyForm1 f = new MyForm1();
f.Close += OnOpenOverviewWin();
Application.ShutdownMode = ShutdownMode.OnLastWindowClose;
Application.Run(f);

void OnOpenOverviewWin()
{
  if (loginok)
  {
    MyOverViewForm f = new MyOverViewForm ();
    f.Show();
  }
}

您需要在關閉登錄表單之前顯示主表單。 試試這個:

main.show();//display main form
this.close()//close login form

我一直在做的是:

MainForm main=new MainForm();
Visible = false;
main.Show();

在我的主窗體中,我將form_closed事件處理程序設置為Application.Exit(); 像這樣:

private void main_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}

所以當用戶點擊關閉主要的所有應用程序停止

我認為接受的答案在某種程度上是不正確的。 這是OP正在尋找的實際答案。 對不起,需要一年的時間才能得到解答。 在項目的Program.cs文件中的Main()方法內,復制並粘貼以下內容:

        Logon logonForm = new Logon();
        if(logonForm.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new Portal());             
        }

當用戶通過身份驗證或登錄成功成功時,在logonForm內部設置表單的DialogResult = DialogResult.OK以下是此示例:

    private void logonButton_Click(object sender, EventArgs e)
    {
        string username = usernameTextBox.Text;
        string password = passwordTextBox.Text;

        if(logon(username, password))
        {
            MessageBox.Show("Logged On Successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
        else
        {
            MessageBox.Show(getFailureReason(), "Failure",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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