Когда вы используете ToolStripProfessionalRenderer
, изменение цвета не меняет цвет подсветки. Кроме того, в то время как ваша полоса инструментов использует один рендерер, поскольку средство визуализации использует свойство MenuItemSelectedColor
средства визуализации ProfessionalColorTable
, оно не может отображать цвет выделения на основе состояния.
Динамическое изменение рендера от ToolStrip
и установка его средства визуализации в средство визуализации, которое выделяет выделение в желаемом цвете.
![enter image description here](https://i.stack.imgur.com/TXITG.gif)
Вот шаги, которые я использовал:
(1) Установите RenderMode
из вашего ToolStrip
в ManagerRenderMode
:
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
}
Здесь [аналогичный вопрос] (http://stackoverflow.com/a/9260827/5753992) «Как изменить цвет наведения»? – Lester
@LarsTech Связанный пост не дублируется вообще. OP хочет использовать ** различный цвет выделения для разных инструментов ToolStripMenuItems **. Связанная почта не удовлетворяет такому требованию и обеспечивает способ изменения цвета выделения для всех элементов. –