【发布时间】:2012-11-19 14:52:39
【问题描述】:
我正在尝试在用户悬停菜单项时实现“预览”场景。
例如,假设一个程序有一个带有“设置颜色”子菜单的上下文菜单。 子菜单弹出一个可供选择的颜色列表。 现在,当鼠标光标位于特定颜色上时,我希望它更改“选定颜色”的标签。 并且当鼠标光标离开选中的颜色菜单项时,我想给标签恢复原来的文字。
以下代码演示了在选择菜单项时更改标签 - 鼠标悬停。
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 实现某种“取消选择”/“MouseLeave”事件?
【问题讨论】:
-
很难想象这会有什么用,当上下文菜单关闭时,您将永远无法选择颜色。请考虑改用 ContextMenuStrip 类。 ToolSTripMenuItem 类有一个 MouseLeave 事件。还有一个 Checked 属性,可能是您真正想要的。
-
如果我只想在鼠标“悬停”上预览,这很有用。当用户在该菜单项上实际单击 时,我将设置选定的颜色。 ContextMenuStrip 和 ToolSTripMenuItem 是我正在寻找的答案。谢谢!
-
好的,有道理。在这种情况下,ContextMenu.Closed 事件足以恢复之前的选择。