WinForms任务栏图标 - 单击事件不触发

时间:2010-04-07 19:56:57

标签: c# events icons taskbar

我创建了一个使用NotifyIcon类的 非表单 c#程序。

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

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

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!");
    }
 }

3 个答案:

答案 0 :(得分:2)

为什么不创建表单应用程序,并在初始化时隐藏表单?我从来没有使用这种方法的通知图标问题

答案 1 :(得分: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()事件来隐藏Hans提供的表单或SetVisibleCore时,点击或任何鼠标事件都不会触发。

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

P.S。虽然表单可见,但一切正常。