2016-05-04 4 views
1

Существует один объект ToolStripMenuItem, который содержит другие 3 ToolStripMenuItems при выпадающем списке. Я хочу использовать разные цвета hightlight в MouseHover различных инструментов ToolStripMenuItems. Скажите: «Да - зеленый». Для No - Red. Для MayBe - Blue. Цвет выделения должен быть соответствующим образом изменен, так как я перемещаюсь между разными предметами. Пожалуйста помоги.Использовать различные цвета Выделите цвет для различных инструментовStripMenuItems

P.S. - События MouseEnter, MouseLeave, MouseHover не работают, потому что они работают с ToolStripMenuItems, и это относится к Highlighter.

+0

Здесь [аналогичный вопрос] (http://stackoverflow.com/a/9260827/5753992) «Как изменить цвет наведения»? – Lester

+1

@LarsTech Связанный пост не дублируется вообще. OP хочет использовать ** различный цвет выделения для разных инструментов ToolStripMenuItems **. Связанная почта не удовлетворяет такому требованию и обеспечивает способ изменения цвета выделения для всех элементов. –

ответ

2

Когда вы используете ToolStripProfessionalRenderer, изменение цвета не меняет цвет подсветки. Кроме того, в то время как ваша полоса инструментов использует один рендерер, поскольку средство визуализации использует свойство MenuItemSelectedColor средства визуализации ProfessionalColorTable, оно не может отображать цвет выделения на основе состояния.

Динамическое изменение рендера от ToolStrip и установка его средства визуализации в средство визуализации, которое выделяет выделение в желаемом цвете.

enter image description here

Вот шаги, которые я использовал:

(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 
} 
+0

Это решение работает, но проблема теперь в том, что если я перехожу от первого выпадающего списка к второму, а затем второго к третьему. Теперь в третьем раскрывающемся списке я хочу эту функциональность, пока она выделяет все остальные выпадающие списки. –

+0

Итак, проблема на самом деле заключается в вложенных элементах меню. Я не хочу выделять родительские элементы. –

+0

[ссылка] (http://s32.postimg.org/phspoxq9x/upload.png) –