为不同的 ToolStripMenuItems 使用不同的高亮颜色
Use different Highlight color for different ToolStripMenuItems
下拉菜单中有一个 ToolStripMenuItem 对象包含其他 3 个 ToolStripMenuItem。我想在不同 ToolStripMenuItems 的 MouseHover 上使用不同的高亮颜色。说,是的 - 绿色。对于否 - 红色。对于 MayBe - 蓝色。当我在不同的项目之间移动时,突出显示的颜色应该相应地改变。请帮忙。
P.S。 - MouseEnter、MouseLeave、MouseHover 事件不起作用,因为它们在 ToolStripMenuItems 上起作用,Highlighter.
就是这种情况
当您使用 ToolStripProfessionalRenderer
时,更改背景颜色不会更改突出显示颜色。此外,虽然您的工具条使用单个渲染器,但由于渲染器使用渲染器的 MenuItemSelectedColor
属性 of ProfessionalColorTable
,因此它无法根据条件渲染突出显示颜色。
您可以动态更改 ToolStrip
的渲染器并将其渲染器设置为以所需颜色绘制高光的渲染器。
以下是我使用的步骤:
(1) 将 ToolStrip
的 RenderMode
设置为 ManagerRenderMode
:
this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;
(2) 创建自定义颜色 table,您可以将 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
}
下拉菜单中有一个 ToolStripMenuItem 对象包含其他 3 个 ToolStripMenuItem。我想在不同 ToolStripMenuItems 的 MouseHover 上使用不同的高亮颜色。说,是的 - 绿色。对于否 - 红色。对于 MayBe - 蓝色。当我在不同的项目之间移动时,突出显示的颜色应该相应地改变。请帮忙。
P.S。 - MouseEnter、MouseLeave、MouseHover 事件不起作用,因为它们在 ToolStripMenuItems 上起作用,Highlighter.
就是这种情况当您使用 ToolStripProfessionalRenderer
时,更改背景颜色不会更改突出显示颜色。此外,虽然您的工具条使用单个渲染器,但由于渲染器使用渲染器的 MenuItemSelectedColor
属性 of ProfessionalColorTable
,因此它无法根据条件渲染突出显示颜色。
您可以动态更改 ToolStrip
的渲染器并将其渲染器设置为以所需颜色绘制高光的渲染器。
以下是我使用的步骤:
(1) 将 ToolStrip
的 RenderMode
设置为 ManagerRenderMode
:
this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;
(2) 创建自定义颜色 table,您可以将 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
}