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.

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
}
Hier ist eine [ähnliche Frage] (http://stackoverflow.com/a/9260827/5753992) zu beachten "Wie ändere ich die Hover-Farbe im Menü?" – Lester
@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. –