2016-06-06 4 views
0

Ich habe ein Windows Forms Tool erstellt und eine Menüleiste mit mehreren Elementen und einem Dropdown-Menü hinzugefügt. Alles funktioniert gut und wenn ich den Dropdown-Menü-Eintrag "Datei" auswähle, wird es korrekt erweitert. Aber wenn die Cursor die Werkzeugleiste des Menüpunkt „Datei“ auf die Drop-Down-Menüpunkte verlassen, ändert es seine Farbe automatisch auf weiß, so dass Sie nicht den weißen Text nicht mehr lesen können:Werkzeugleiste Menüpunkt ändert seine Farbe selbst, wenn der Cursor aktiviert Element

Unclicked menu strip

Clicked menu strip with mouse cursor on dropdown items

ich hatte auch ähnliche Probleme mit Farbänderungen des Menüleiste vor, so dass ich bereits definiert einen Renderer:

class BlueRenderer : ToolStripProfessionalRenderer 
{ 
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) 
    { 
     if (!e.Item.Selected) 
     { 
      base.OnRenderMenuItemBackground(e); 
      e.Item.BackColor = Color.MediumBlue; 

     } 
     else 
     {     
      Rectangle rc = new Rectangle(Point.Empty, e.Item.Size); 
      e.Graphics.FillRectangle(Brushes.Blue, rc);     
      e.Graphics.DrawRectangle(Pens.MediumBlue, 1, 0, rc.Width - 2, rc.Height - 1);     
      e.Item.BackColor = Color.MediumBlue; 
      base.OnRenderItemBackground(e); 
      e.Item.BackColor = Color.MediumBlue; 
     } 
    } 
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) 
    { 
     base.OnRenderItemText(e); 
     if (!e.Item.Selected) 
     { 
      e.Item.ForeColor = SystemColors.ControlLightLight; 
     } 
     else 
     { 
      e.Item.ForeColor = SystemColors.ControlLightLight; 
     } 
    } 
} 

ich glaube, ich habe eine andere Eigenschaft oder Verhalten in Renderer ändern, aber ich Ich weiß nicht einmal welche und wie ich sie ändern kann. Bitte helfen Sie mir, die Objektfarbe einfach blau/mittelblau zu halten, wenn der Mauszeiger dieses Element verlässt.

Prost

Florian

Antwort

0

die Lösung gefunden, indem mehrere Renderer Optionen ausprobieren: ich meine früheren "BlueRenderer" gestrichen und haben eine ProfessionalColorTable stattdessen angegeben:

public class ownColorTable : System.Windows.Forms.ProfessionalColorTable 
{ 
    public override Color MenuItemPressedGradientBegin 
    { 
     get 
     { 
      return Color.Blue; 
     } 
    } 

    public override Color MenuItemPressedGradientEnd 
    { 
     get 
     { 
      return Color.Blue; 
     } 
    } 

Dann initialisiert ich die ToolStripProfessionalRenderer wie folgt:

menuStrip1.Renderer = new ToolStripProfessionalRenderer(new ownColorTable()); 
Verwandte Themen