2016-04-21 13 views
0

Ich programmiere ein Backup Tool. Auf meinem Werkzeug habe ich eine Menustrip mit zwei Tools. Ich habe die Farben ein wenig auf meine Erwartungen geändert. Nicht fokussiert das Menü sieht gut aus:Farbwechsel für MenuItem

Unclicked Menu Item

Wenn ich jetzt auf „Datei“ den Menüpunkt klicken Sie auf das Kontextmenü zu öffnen, ändert sich die Farbe auf weiß, und ich bin nicht in der Lage, den Text zu lesen mehr:

Clicked Menu Item

kann jemand bitte sagen Sie mir, wo ich dieses Verhalten ändern? Ich verwende Visual Studio 2013 Ultimate, Windows Forms-Anwendung, Code ist in C#. Hier

ist der Code:

// // initializing menuStrip1 // this.menuStrip1.BackColor = System.Drawing.Color.MediumBlue; this.menuStrip1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.menuStrip1.Font = new System.Drawing.Font("Segoe UI Semilight", 15.75F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, this.helpToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.MinimumSize = new System.Drawing.Size(0, 40); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Size = new System.Drawing.Size(1056, 40); this.menuStrip1.TabIndex = 77; this.menuStrip1.Text = "menuStrip1"; // // initializing fileToolStripMenuItem and adding to menuStrip1 // this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.saveToolStripMenuItem, this.saveAsToolStripMenuItem, this.loadToolStripMenuItem}); this.fileToolStripMenuItem.Font = new System.Drawing.Font("Calibri Light", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.fileToolStripMenuItem.ForeColor = System.Drawing.SystemColors.ControlLightLight; this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Size = new System.Drawing.Size(54, 36); this.fileToolStripMenuItem.Text = "File"; this.fileToolStripMenuItem.Click += new System.EventHandler (this.fileToolStripMenuItem_Click); // // initializing saveToolStripMenuItem and adding to fileToolStripMenuItem // this.saveToolStripMenuItem.BackColor = System.Drawing.Color.MediumBlue; this.saveToolStripMenuItem.ForeColor = System.Drawing.SystemColors.ControlLightLight; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.Size = new System.Drawing.Size(166, 30); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler (this.saveToolStripMenuItem_Click);
//

+1

Können Sie Ihre Farbe Anpassungscode schreiben? –

+0

Hinzugefügt den Initialisierungscode :) –

Antwort

0

Standardmäßig ist diese Funktion nicht verfügbar ist aus dem Kasten heraus. Sie müssen eine benutzerdefinierte Renderer für Sie Werkzeugleiste erstellen, um dies zu erreichen.

Erstellen Sie eine Klasse, die von ToolStripProfessionalRenderer erbt -

private class BlueRenderer : ToolStripProfessionalRenderer 
    { 
     protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) 
     { 
      Rectangle rc = new Rectangle(Point.Empty, e.Item.Size); 
      Color c = Color.MediumBlue; 
      using (SolidBrush brush = new SolidBrush(c)) 
       e.Graphics.FillRectangle(brush, rc); 
     } 
    } 

und befestigen diese Renderer auf Ihre Menüleiste in Ihrem Formular Konstruktor -

public Form1() 
    { 
     InitializeComponent(); 
     menuStrip1.Renderer = new BlueRenderer(); 
    } 
+0

Haha, funktioniert gut, vielen Dank! Lustig, dass Sie alle Farben standardmäßig ändern können, aber nicht das bestimmte ... Microsoft Logik ?! –

+0

Eine weitere Frage. Jetzt ist die Farbe MediumBlue für alle Zustände. Kann ich LightBlue haben, als ich auf das Element im Menü "Strip1" geklickt habe? –

+1

@ schmelzer-daniel - Definiere einfach deinen clocr so: 'Farbe c = e.Item.Selected? Farbe.Lichtblau: Farbe.Mittelblau; ' – Yogi

1

Sie können Ihre eigenen ProfessionalColorTable erstellen und außer Kraft setzen, es ist Eigenschaften:

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MyColorTable()); 
     } 
    } 

public class MyColorTable : ProfessionalColorTable 
{ 
    public override Color ToolStripDropDownBackground 
    { 
     get 
     { 
      return Color.Blue; 
     } 
    } 

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

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

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

    public override Color MenuBorder 
    { 
     get 
     { 
      return Color.Black; 
     } 
    } 

    public override Color MenuItemBorder 
    { 
     get 
     { 
      return Color.Black; 
     } 
    } 

    public override Color MenuItemSelected 
    { 
     get 
     { 
      return Color.Navy; 
     } 
    } 

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

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

    public override Color MenuItemSelectedGradientBegin 
    { 
     get 
     { 
      return Color.Navy; 
     } 
    } 

    public override Color MenuItemSelectedGradientEnd 
    { 
     get 
     { 
      return Color.Navy; 
     } 
    } 

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

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

Dies ist das Ergebnis von cod über e:

Custom menu