[英]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.