2016-05-04 10 views
1

Es gibt ein ToolStripMenuItem-Objekt, das andere 3 ToolStripMenuItems in Dropdown enthält. Ich möchte verschiedene hightlight Farben auf MouseHover von verschiedenen ToolStripMenuItems verwenden. Sagen Sie, für Ja - Grün. Für Nein - Rot. Für MayBe - Blau. Die Farbe der Hervorhebung sollte sich entsprechend ändern, wenn ich zwischen verschiedenen Elementen wechsle. Bitte helfen Sie.Verwenden Sie unterschiedliche Hervorhebungsfarbe für verschiedene ToolStripMenuItems

P.S. - MouseEnter, MouseLeave, MouseHover-Ereignisse funktionieren nicht, da sie auf ToolStripMenuItems funktionieren, und es ist der Fall von Highlighter.

+0

Hier ist eine [ähnliche Frage] (http://stackoverflow.com/a/9260827/5753992) zu beachten "Wie ändere ich die Hover-Farbe im Menü?" – Lester

+1

@LarsTech Der verlinkte Beitrag ist überhaupt nicht dupliziert. Das OP möchte ** verschiedene Highlight-Farben für verschiedene ToolStripMenuItems ** verwenden. Der verknüpfte Post erfüllt diese Anforderung nicht und bietet eine Möglichkeit, die Hervorhebungsfarbe für alle Elemente zu ändern. –

Antwort

2

Wenn Sie eine ToolStripProfessionalRenderer verwenden, ändert sich beim Ändern der Hintergrundfarbe die Markierungsfarbe nicht. Auch wenn Ihre Werkzeugleiste einen einzelnen Renderer verwendet, kann der Renderer keine MenuItemSelectedColor Eigenschaft des ProfessionalColorTable Renderers verwenden, und er kann die Hervorhebungsfarbe nicht basierend auf einer Bedingung darstellen.

Sie können den Renderer von ToolStrip dynamisch ändern und seinen Renderer auf einen Renderer setzen, der die Hervorhebung in der gewünschten Farbe zeichnet.

enter image description here

Hier sind die Schritte, die ich verwendet:

(1) die RenderMode Ihrer ToolStrip-ManagerRenderMode Set:

this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode; 

(2) eine benutzerdefinierte erstellen Farbtabelle, die Sie MenuItemSelectedColor zu ihm übergeben können:

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

(3) Renderer definieren, die Sie auf Formularebene benötigen:

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) Griff MouseEnter und MouseLeave Ereignis für alle Menüpunkte, die Sie benutzerdefinierte Renderer verwenden möchten, und Weisen Sie diese Handler zu allen von ihnen:

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

Diese Lösung funktioniert, aber das Problem ist jetzt - dass, wenn ich vom ersten Dropdown zum zweiten, und dann zum zweiten zum dritten gehe. Jetzt nur im dritten Dropdown, möchte ich diese Funktionalität, während es alle anderen Dropdowns hervorhebt. –

+0

Also, das Problem liegt tatsächlich in geschachtelten MenuItems. Ich möchte die übergeordneten Elemente nicht hervorheben. –

+0

[link] (http://s32.postimg.org/phspoxq9x/upload.png) –