【发布时间】:2009-08-27 21:35:24
【问题描述】:
我的 Windows 窗体应用程序 (C#) 有一个奇怪的问题。我的项目中有一个带有 NotifyIcon 的表单 (Form1) 和另一个表单 (Form2)。 Form1 有一些代码,这些代码基本上会进行一些 XML 解析,并将一堆 LinkLabels 添加到 Form2 上。这一切都很好。
在 NotifyIcon 上,我有一个带有 EventHandler 的 ContextMenu MenuItem(称为“Refresh”),基本上,它运行 XML 解析命令。在 NotifyIcon 上,我还有一个 MouseDoubleClick 命令,当双击系统托盘图标时,它会打开 Form2(使用 ShowDialog())以显示 LinkLabels 的链接。这也很好用。
我在 Form2 上有一个按钮控件(称为“关闭”),它正在使用这个 EventHandler 代码:
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
关闭 Form2。这也很好用。
但是,根据 Form1 的 NotifyIcon 上的“刷新”ContextMenu MenuItem 被点击的次数,这是在 Form2 关闭之前必须按下 Form2 上的“关闭”按钮控件的次数。例如,如果用户点击 Form1 上的“刷新”菜单项 3 次,他们将不得不点击 Form2 上的“关闭”按钮控件 3 次。这几乎就像 Form2 明显关闭,但代码似乎没有识别出它已关闭。
我是 Windows Form 开发的新手,所以我可能不知道这是一个生命周期的事情。任何帮助将不胜感激。
编辑。我会尝试发布适当的代码:
//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();
}
}
在 Form2(消息)上,我有一个带有此 Click 处理程序代码的按钮:
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
//I have also tried:
if (this.Visible)
this.Hide();
}
【问题讨论】:
-
你能把刷新菜单项的代码和你用来打开Form2的代码贴出来吗?
-
Form2 是无模式表单吗?您是否在 btnClose_Click 中放置了一个断点以确保每次都调用它?