簡體   English   中英

C#Windows窗體切換

[英]C# Windows Forms switching

我得到了Form1 ,當單擊某些按鈕時,它將創建另一個表單:

 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     Form f5 = new Form5();
     f5.Show();
 }

當發生這種情況時,我需要確定此表單f5是否存在,因此如果存在,則當按下按鈕時,它會簡單地切換到現有表單,而不是制作新表單。如果不存在,則必須創建新表單。 如果在聲明它們之前無法檢查是否存在某些對象,該怎么辦? 如何在我聲明f5之前檢查它的存在,以便僅在沒有這種形式且需要它時才可以創建它?

正確的方法是在創建Form5對象時保留對其的引用。 您可以通過例如聲明一個類級變量來做到這一點。

public class MyForm : Form
{
    private Form5 m_frm5 = null;

    // ...other code...

    private void ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (m_frm5 == null)
        {
            m_frm5 = new Form5();
        }
        m_frm5.Show();
    }
}

顯然,您需要根據訪問表單對象的位置來適當選擇一個范圍。 static局部變量也可能同樣有效,或者您可能需要使整個應用程序都具有全局變量。

另外,您可以遍歷Application.OpenForms集合,檢查是否已創建Form5實例。

private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
    foreach (Form f in Application.OpenForms)
    {
        if (f.GetType() == typeof(Form5))
        {
            f.Show();
            return;
        }
    }

    Form5 frm5 = new Form5();
    frm5.Show();
}

專家提示:為表單類選擇比默認名稱更多的描述性名稱。 Form5告訴我什么都沒有。

創建Form5作為私有變量。 在創建一個新的之前,請先檢查它是否存在。

 private Form5 form5 = null;

 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if(f5 == null || !f5.Visible)
         f5 = new Form5();

     f5.Show();
 }

我只是將實例作為父代碼的一部分:

Form f5 = null;

private void ToolStripMenuItem_Click(object sender, EventArgs e) { 
if (f5 == null) {
      f5 = new Form5(); 
      f5.Show();
  }
 }

以后的編輯:對,您已經捕獲了正確的代碼序列:)。 我的只會打開一次。

如果您的應用程序不是MDI,我寧願使用ShowDialog()

暫無
暫無

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

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