对不同的ToolStripMenuItem使用不同的突出显示颜色

时间:2016-05-04 13:39:19

标签: c# .net winforms menustrip toolstripmenu

有一个ToolStripMenuItem对象,它在下拉列表中包含其他3个ToolStripMenuItems。我想在不同的ToolStripMenuItems的MouseHover上使用不同的高亮颜色。说,是的 - 绿色。对于否 - 红色。对于MayBe - Blue。当我在不同的项目之间移动时,高光的颜色应该相应地改变。请帮忙。

P.S。 - MouseEnter,MouseLeave,MouseHover事件无法正常工作,因为它们适用于ToolStripMenuItems,而 Highlighter 就属于这种情况。

1 个答案:

答案 0 :(得分:2)

使用ToolStripProfessionalRenderer时,更改背面颜色不会更改突出显示颜色。此外,当您的工具条使用单个渲染器时,由于渲染器使用渲染器的MenuItemSelectedColor ProfessionalColorTable属性,因此无法根据条件渲染高光颜色。

您可以动态更改ToolStrip的渲染器并将其渲染器设置为渲染器,该渲染器以您想要的颜色绘制突出显示。

enter image description here

以下是我使用的步骤:

(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