
In einer Windows-Form habe ich einen MenuStrip mit einem blauen Hintergrund. Die Schriftfarbe (ForeColor) wurde daher von System.ControlText zu System.Control geändert, da es sonst schlecht lesbar wäre. Allerdings ergab sich nun das Problem, dass beim Aktivieren des Menüs der Hover-Effekt für einen hellen Hintergrund sorgt und der Text kaum noch lesbar ist.
Der Hover-Effekt selbst sollte so bleiben, aber die Schriftfarbe entsprechend des Hintergrundes bzw. Status (aktiv/inaktiv) angepasst werden. Möglich macht es das Event ToolStripMenuItem.Paint. Damit man aber sowohl das direkte Hovern als auch das aufgeklappte DropDown-Menüs erwischt, müssen offenbar die Eigenschaften Selected und Pressed abgefragt werden.
[sourcecode language=“csharp“]
myItem.Paint += new PaintEventHandler( myItem_Paint );
void myItem_Paint( object sender, PaintEventArgs e )
{
var item = (ToolStripMenuItem) sender;
if (item.Selected || item.Pressed)
{
item.ForeColor = SystemColors.ControlText;
}
else
{
item.ForeColor = SystemColors.Control;
}
}
[/sourcecode]
#1 von Axel am 19. Juli 2015 - 12:53
Ich bin leider noch Anfänger, aber es scheint in VS 2015 nicht mehr zu funktionieren, dieser kommt mit myItem.Paint += new PaintEventHandler( myItem_Paint ); nicht klar und es erscheinen verschiedene Fehlermeldungen.