首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MenuItem的"Unselect“事件

MenuItem的"Unselect“事件
EN

Stack Overflow用户
提问于 2011-11-29 23:09:36
回答 4查看 625关注 0票数 2

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

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

下面的代码演示了在菜单项选定鼠标结束时更改标签。

代码语言:javascript
复制
    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实现某种“取消选择”/“鼠标离开”事件呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-29 23:11:37

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

我只需要捕捉你上下文菜单的Collapse事件,并在那里重置你的标签。这将有一个额外的好处,如果用户将鼠标悬停在" red“选项上,然后又悬停在上下文菜单上,那么标签应该保持红色,直到上下文菜单关闭。

代码语言:javascript
复制
mnuContextMenu.Collapse += (s, e) => lblSelectedColor.Text = "None";

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

代码语言:javascript
复制
MyPanel.MouseEnter += (s, e) => lblSelectedColor.Text = "None";

EDIT确实考虑改用ContextMenuStrip类。ToolSTripMenuItem类有一个MouseLeave事件。和一个选中的属性,这可能是你真正想要的。

票数 1
EN

Stack Overflow用户

发布于 2011-11-29 23:30:45

你就不能保存旧的MenuItem引用吗。

代码语言:javascript
复制
private MenuItem _oldMenuItem;

void ColorSelect(object sender, EventArgs e)
    {
        if(_oldMenuItem != null) _oldMenuItem.Text = someText;
        _oldMenuItem = sender as MenuItem;

        lblSelectedColor.Text = ((MenuItem) sender).Text;
    }
票数 1
EN

Stack Overflow用户

发布于 2011-11-29 23:17:52

使用MouseEnterMouseLeave事件来处理所有事情。当鼠标指针进入此元素的边界时引发。和第二个鼠标指针离开边界-在这一点上,您恢复默认标签文本。

使用ContextMenuStrip和ToolStripMenuItems编辑,就像Hans在注释中指出的那样,您将拥有这些事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8313085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档