有一个ToolStripMenuItem对象,它在下拉列表中包含其他3个ToolStripMenuItems。我想在不同的ToolStripMenuItems的MouseHover上使用不同的高亮颜色。说,是的 - 绿色。对于否 - 红色。对于MayBe - Blue。当我在不同的项目之间移动时,高光的颜色应该相应地改变。请帮忙。
P.S。 - MouseEnter,MouseLeave,MouseHover事件无法正常工作,因为它们适用于ToolStripMenuItems,而 Highlighter 就属于这种情况。
答案 0 :(得分:2)
使用ToolStripProfessionalRenderer
时,更改背面颜色不会更改突出显示颜色。此外,当您的工具条使用单个渲染器时,由于渲染器使用渲染器的MenuItemSelectedColor
ProfessionalColorTable
属性,因此无法根据条件渲染高光颜色。
您可以动态更改ToolStrip
的渲染器并将其渲染器设置为渲染器,该渲染器以您想要的颜色绘制突出显示。
以下是我使用的步骤:
(1)将RenderMode
的{{1}}设置为ToolStrip
:
ManagerRenderMode
(2)创建一个自定义颜色表,您可以将this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;
传递给它:
MenuItemSelectedColor
(3)在表单级别定义您需要的渲染器:
public class MyColorTable : ProfessionalColorTable
{
private Color menuItemSelectedColor;
public MyColorTable(Color color): base()
{
menuItemSelectedColor = color;
}
public override Color MenuItemSelected
{
get { return menuItemSelectedColor; }
}
}
(4)处理您要使用自定义渲染器的所有菜单项的ToolStripProfessionalRenderer r =
new ToolStripProfessionalRenderer(new MyColorTable(Color.Red));
ToolStripProfessionalRenderer g =
new ToolStripProfessionalRenderer(new MyColorTable(Color.Green));
ToolStripProfessionalRenderer b =
new ToolStripProfessionalRenderer(new MyColorTable(Color.Blue));
和MouseEnter
事件,并将此处理程序分配给所有菜单项:
MouseLeave