c# WinForms托盘菜单项鼠标悬停检测

本文关键字:鼠标 悬停 检测 菜单项 WinForms | 更新日期: 2023-09-27 17:49:21

我有一个相当简单的问题,但我没能找到解决方案。我有一个驻留在任务托盘中的应用程序。当用户右键单击托盘图标时,程序显示菜单项菜单。我想执行代码时,我的一些菜单项鼠标悬停。

这可能吗?

你能告诉我正确的方向吗?

我正在使用NotifyIcon

        trayMenu = new ContextMenu();
        trayMenu.MenuItems.Add("Exit", OnExit);
        trayIcon = new NotifyIcon();
        trayIcon.Text = "blah";
        trayIcon.Icon = new Icon("favicon.ico", 40, 40);
        trayIcon.ContextMenu = trayMenu;
        trayIcon.Visible = true;

c# WinForms托盘菜单项鼠标悬停检测

您必须使用每个菜单项的MouseHoverMouseEnterMouseLeave事件。

:是的,NotifyIcon控件有一个名为ContextMenuStrip的属性。您必须创建ContextMenuStrip控件来显示菜单。它包含ToolStripMenuItems类型的项。我试图创建一个简单的原型- MouseHover工作得很好。

我想你可能需要菜单项的选择事件:

此事件通常在以下情况引发用户将鼠标指针放在上面菜单项。事件也可以是当用户突出显示菜单时引发项目使用键盘通过滚动到使用方向键的菜单项。

解决方案https://www.codeproject.com/Tips/254525/Automatically-display-Menu-on-Hover

private void Form1_Load(object sender, EventArgs e)
{
    this.menuStrip1.Items[0].MouseHover += new EventHandler(Form1_MouseHover);
}

void Form1_MouseHover(object sender, EventArgs e)
{
    if (sender is ToolStripDropDownItem)
    {
        ToolStripDropDownItem item = sender as ToolStripDropDownItem;
        if (item.HasDropDownItems && !item.DropDown.Visible)
        {
            item.ShowDropDown();
        }
    }
}