我的Windows窗體應用程序(C#)有一個奇怪的問題。我在我的項目中有一個帶有NotifyIcon的表單(Form1)和另一個表單(Form2)。 Form1有一些代碼基本上做了一些XML解析,並在Form2上添加了一堆LinkLabel。這一切工作正常。Windows窗體:關閉,但不關閉
在NotifyIcon上,我有一個帶有EventHandler的ContextMenu MenuItem(稱爲「Refresh」),基本上可以通過XML解析命令運行。我還在NotifyIcon上有一個MouseDoubleClick命令,當系統托盤圖標被雙擊時,它打開Form2(使用ShowDialog())顯示LinkLabels的鏈接。這也很好。
我有Form2上的一個按鈕控件(稱爲 「關閉」),正在使用此事件處理代碼:
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
關閉窗體2。這也很好。
但是,根據Form1的NotifyIcon上的「Refresh」ContextMenu MenuItem命中的次數,這是在Form2關閉之前必須按下Form2上的「關閉」按鈕控件的次數。例如,如果用戶三次在Form1上點擊「Refresh」MenuItem,他們將不得不在Form2上點擊「關閉」按鈕控件三次。這幾乎就像Form2明顯關閉,但代碼似乎沒有認識到它已關閉。
我是新來的Windows窗體的發展,所以也許這是我不知道的生命週期的事情。任何幫助,將不勝感激。
編輯。我會嘗試發佈相應的代碼:
//NotifyIcon Form (Form1)
//ico is the ID of the NotifyIcon
public partial class TrayIcon : Form
{
Message msg = new Message(); //Form2
ContextMenu contextMenu = new ContextMenu();
public TrayIcon()
{
InitializeComponent();
}
private void TrayIcon_Load(object sender, EventArgs e)
{
contextMenu.MenuItems.Clear();
contextMenu.MenuItems.Add(0, new MenuItem("Refresh", new System.EventHandler(ico_Refresh)));
ico.DoubleClick += new MouseEventHandler(ico_ShowMsg);
DoXmlParsing();
}
private void ico_Refresh(object Sender, EventArgs e)
{
TrayIcon_Load(null, null);
}
private void ico_ShowMsg(object Sender, MouseEventHandler e)
{
if (msg.Visible == false)
msg.ShowDialog();
}
}
在窗體2(消息),我有這個點擊處理代碼按鈕:
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
//I have also tried:
if (this.Visible)
this.Hide();
}
您可以發佈Refresh MenuItem的代碼和用於打開Form2的代碼嗎? – 2009-08-27 21:39:23
Is Fo RM2是一種無模式的形式?你有沒有在btnClose_Click中放置一個斷點來確保它每次都被調用? – 2009-08-27 21:39:48