1

下拉菜单中有一个 ToolStripMenuItem 对象,其中包含其他 3 个 ToolStripMenuItem。我想在不同 ToolStripMenuItems 的 MouseHover 上使用不同的高亮颜色。说,是的 - 绿色。对于否 - 红色。对于MayBe - 蓝色。当我在不同的项目之间移动时,突出显示的颜色应该会相应改变。请帮忙。

PS - MouseEnter、MouseLeave、MouseHover 事件不起作用,因为它们在 ToolStripMenuItems 上起作用,而Highlighter就是这种情况。

4

1 回答 1

3

当您使用 aToolStripProfessionalRenderer时,更改背景颜色不会更改突出显示颜色。此外,当您的工具条使用单个渲染器时,由于渲染器使用渲染器的MenuItemSelectedColor属性 ProfessionalColorTable,它不能根据条件渲染突出显示颜色。

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

在此处输入图像描述

以下是我使用的步骤:

(1)RenderMode你的设置ToolStripManagerRenderMode

this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;

(2)创建一个自定义颜色表,您可以将其传递MenuItemSelectedColor给它:

public class MyColorTable : ProfessionalColorTable
{
    private Color menuItemSelectedColor;
    public MyColorTable(Color color): base()
    {
        menuItemSelectedColor = color;
    }
    public override Color MenuItemSelected
    {
        get { return menuItemSelectedColor; }
    }
}

(3)在表单级别定义您需要的渲染器:

ToolStripProfessionalRenderer r = 
    new ToolStripProfessionalRenderer(new MyColorTable(Color.Red));
ToolStripProfessionalRenderer g = 
    new ToolStripProfessionalRenderer(new MyColorTable(Color.Green));
ToolStripProfessionalRenderer b = 
    new ToolStripProfessionalRenderer(new MyColorTable(Color.Blue));

(4)您想要使用自定义渲染器的所有菜单项的句柄MouseEnter和事件,并将此处理程序分配给所有菜单项:MouseLeave

private void menuItem_MouseEnter(object sender, EventArgs e)
{
    var item = (ToolStripMenuItem)sender;
    if (item.Text == "Yes")
        ToolStripManager.Renderer = g;
    else if (item.Text == "No")
        ToolStripManager.Renderer = r;
    else if (item.Text == "MayBe")
        ToolStripManager.Renderer = b;
    else
        ToolStripManager.Renderer = null; // or use your default renderer
}

private void menuItem_MouseLeave(object sender, EventArgs e)
{
    ToolStripManager.Renderer = null; // or use your default renderer
}
于 2016-05-04T15:02:27.360 回答