我有一個關于在 C# 中創建新表單的問題。我想創建多個表單(MainPanel),如下面的代碼所示。這將創建一個新表單并顯示它。
private void Panel_MouseClick(object sender, MouseEventArgs e)
{
Form mp = new MainPanel();
mp.Show();
}
在 MainPanel 表單中,我設定了一些事件和控制元件。其中一個是退出按鈕,如果按下它,它將關閉表單
public partial class MainPanel : Form
{
private static MainPanel mainPanel;
public MainPanel()
{
InitializeComponent();
mainPanel = this;
Panel panel = new Panel();
panel.Name = "ExitButton";
panel.BackColor = ExitButtonColor;
panel.BorderStyle = BorderStyle.None;
panel.BackColor = Color.Transparent;
panel.Width = 30;
panel.Height = 30;
panel.MouseClick = PanelExit_MouseClick;
this.Controls.Add(panel);
}
private static void PanelExit_MouseClick(object sender, MouseEventArgs e)
{
mainPanel.Close();
}
}
當我要求它時Form mp = new MainPanel();,.Show()它會按預期作業并打開。退出按鈕也可以。然而,當我通過創建一個新的new MainPanel();然后.Show();它打開第二個時。然后退出按鈕實際上不起作用。
這意味著我有 2 個打開的 MainPanel 表單,它們都有自己的退出按鈕。如果我單擊第一個表單退出按鈕,單擊它將關閉第二個表單。單擊第二個表單上的退出按鈕也將關閉第二個表單。換句話說,我的第一個表單上的所有事件都在我的第二個表單上被觸發和執行。
知道為什么會發生這種情況或如何避免嗎?
uj5u.com熱心網友回復:
使用靜態的原因尚不清楚,但這就是您使用靜態時會發生的情況。按原樣,您不得允許創建第二個實體
正如 Hans 在我的帖子下評論的那樣,我將所有變數和方法保持為靜態,對所有創建的表單保持相同。從方法和變數中洗掉靜態就可以了。
謝謝
uj5u.com熱心網友回復:
旁注,您根本不需要“mainPanel”。為什么要存盤對 的參考this?直接用就行了...
改變:
private static void PanelExit_MouseClick(object sender, MouseEventArgs e)
{
mainPanel.Close();
}
到:
private void PanelExit_MouseClick(object sender, MouseEventArgs e)
{
this.Close();
}
也從方法簽名中洗掉靜態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411200.html
標籤:
