c# - "Unselect"菜单项事件

标签 c# winforms

我正在尝试在用户悬停菜单项时实现“预览”场景。

例如,假设一个程序有一个带有“设置颜色”子菜单的上下文菜单。 子菜单弹出一个颜色列表以供选择。 现在,当鼠标光标位于特定颜色上时,我希望它更改“选定颜色”的标签。 当鼠标光标离开所选颜色菜单项时,我想标签恢复其原始文本。

以下代码演示了在选择菜单项时更改标签 - 鼠标悬停。

    private void Init()
    {
        var mnuContextMenu = new ContextMenu();
        this.ContextMenu = mnuContextMenu;

        var smthingElseMenu = new MenuItem("Do something else");
        var setColorMenu = new MenuItem("Set Color");

        var colorBlue = new MenuItem("Blue");
        var colorRed = new MenuItem("Red");
        var colorGreen = new MenuItem("Green");

        mnuContextMenu.MenuItems.Add(smthingElseMenu);
        mnuContextMenu.MenuItems.Add(setColorMenu);
        setColorMenu.MenuItems.Add(colorBlue);
        setColorMenu.MenuItems.Add(colorRed);
        setColorMenu.MenuItems.Add(colorGreen);

        colorBlue.Select += ColorSelect;
        colorRed.Select += ColorSelect;
        colorGreen.Select += ColorSelect;
    }

    void ColorSelect(object sender, EventArgs e)
    {
        lblSelectedColor.Text = ((MenuItem) sender).Text;
    }

但是当鼠标光标离开菜单项时,我找不到使标签文本恢复的方法。 有什么想法可以为 MenuItem 实现某种“Unselect”/“MouseLeave”事件吗?

最佳答案

不幸的是,MenuItems 没有“取消选择”事件。

我会 catch Collapse你的上下文菜单的事件,并在那里重置你的标签。这会有额外的好处,如果您的用户将鼠标悬停在“红色”选项上,然后将鼠标悬停在上下文菜单之外,则标签应保持红色,直到上下文菜单关闭。

mnuContextMenu.Collapse += (s, e) => lblSelectedColor.Text = "None";

如果您确实需要它在鼠标离开上下文菜单时重置标签,那么您可以捕获围绕上下文菜单的面板(或其他任何内容)的 MouseEnter 事件。

MyPanel.MouseEnter += (s, e) => lblSelectedColor.Text = "None";

编辑 请考虑改用 ContextMenuStrip 类。 ToolSTripMenuItem 类有一个 MouseLeave 事件。还有一个 Checked 属性,可能是您真正想要的。

关于c# - "Unselect"菜单项事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313085/

相关文章:

c# - 如何在richtextbox中建立到本地文件的链接

c# - 如何使用 C# 设置组合框中的选定项以匹配我的字符串?

C#-索引属性?

c# - 使用 FileIO.ReadTextAsync 从文件中读取文本时出现异常

c# - 是否可以从故障点继续运行代码?

c# - 检查 Oracle.DataAccess 是否存在

.net - Windows 窗体的 Visual Studio 单元测试

c# - 当客户端尝试连接到未运行的 C# 服务器时 Unity 卡住

c# - IAsyncResult 的属性isCompleted 是如何更新的?

C# 窗体 : Crosshair in-game