2010-04-07 170 views
0

我创建了一个非形式使用NotifyIcon类的c#程序。WinForms Taskbar Icon - Click Event not firing

当我悬停鼠标时,文本“(点击激活)”出现。 所以我正在处理一些事件。

但是,“点击”事件不会触发,上下文菜单不会显示。

public class CTNotify 
{ 
    static NotifyIcon CTicon = new NotifyIcon(); 
    static ContextMenu contextMenu = new ContextMenu(); 

    static void Main() 
    { 
     //Add a notify Icon 
     CTicon.Icon = new Icon("CTicon.ico"); 
     CTicon.Text = "(Click to Activate)"; 
     CTicon.Visible = true; 
     CTicon.Click += new System.EventHandler(CTicon_Click); 

     //Create a context menu for the notify icon 
     contextMenu.MenuItems.Add("E&xit"); 

     //Attach context menu to icon 
     CTicon.ContextMenu = contextMenu; 

     while (true) //Infinite Loop 
     { 
      Thread.Sleep(300); //wait 
     } 
    } 

    private static void CTicon_Click(object sender, System.EventArgs e) 
    { 
     MessageBox.Show("Clicked!"); 
    } 
} 

回答

2

看看Shell_NotifyIcon() API方法,实现NotifyIcon。点击进入NOTIFYICONDATA结构。该结构的第二部件是一个窗口句柄:

手柄到接收用图标 在通知区域相关联 通知

您没有一个窗口,并可以在窗口因此不会收到通知。您需要必须将NotifyIcon放在表单上。并使用Application.Run()获取通知并激活事件处理程序。

保持您的形式隐藏粘贴此代码:

protected override void SetVisibleCore(bool value) { 
     if (!this.IsHandleCreated) { 
      this.CreateHandle(); 
      value = false; 
     } 
     base.SetVisibleCore(value); 
    } 
2

你为什么不创建一个形式应用程序,并在初始化时只是隐藏窗体?我从来没有使用这种方法通知图标的问题

0

我有同样的问题,当我使用.hide()事件来隐藏窗体或汉斯提供SetVisibleCore,点击或任何鼠标事件不会触发。

有人有另一种解决方案吗?

P.S.虽然窗体是可见的,但一切工作正常。