【问题标题】:WinForms Taskbar Icon - Click Event not firingWinForms 任务栏图标 - 单击事件未触发
【发布时间】:2014-02-03 17:53:43
【问题描述】:

我创建了一个使用 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!");
    }
 }

【问题讨论】:

    标签: c# events icons taskbar


    【解决方案1】:

    看看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】:

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

      【讨论】:

        【解决方案3】:

        我有同样的问题,当我使用 .hide() 事件隐藏表单或 Hans 提供的 SetVisibleCore 时,单击或任何鼠标事件都不会触发。

        有人有其他解决方案吗?

        附:虽然表单可见,但一切正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-09
          • 1970-01-01
          • 2015-01-01
          • 1970-01-01
          相关资源
          最近更新 更多