我的Windows窗体应用程序(C#)有一个奇怪的问题.我的项目中有一个带有NotifyIcon的表单(Form1)和另一个表单(Form2).Form1有一些代码基本上做了一些XML解析,并在Form2上添加了一堆LinkLabel.这一切都很好.
在NotifyIcon上,我有一个带有EventHandler的ContextMenu MenuItem(称为"Refresh"),基本上可以通过XML解析命令运行.我还在NotifyIcon上有一个MouseDoubleClick命令,当双击系统托盘图标时,它会打开Form2(使用ShowDialog())来显示LinkLabels的链接.这也很好.
我在Form2上有一个Button Control(称为"Close"),它正在使用这个EventHandler代码:
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
关闭Form2.这也很好.
但是,根据Form1的NotifyIcon上的"刷新"ContextMenu MenuItem被击中的次数,这是在Form2关闭之前必须按下Form2上的"关闭"按钮控件的次数.例如,如果用户三次击中Form1上的"刷新"MenuItem,则必须在Form2上按三次"关闭"按钮控件.这几乎就像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();
}
}
Run Code Online (Sandbox Code Playgroud)
在Form2(消息)上,我有一个带有此Click处理程序代码的Button:
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
//I have also tried:
if (this.Visible)
this.Hide();
}
Run Code Online (Sandbox Code Playgroud)
我认为这一行是问题所在:
ico.DoubleClick += new MouseEventHandler(ico_ShowMsg);
Run Code Online (Sandbox Code Playgroud)
您继续为双击添加更多事件处理程序,但从不删除它们(因为TrayIcon_Load调用了ico_Refresh.
关闭对话框后,.ShowDialog()会再次调用该事件,但很多时候都会添加此事件处理程序.
| 归档时间: |
|
| 查看次数: |
3776 次 |
| 最近记录: |