Domanda

In questi giorni con Visual C # (in particolare Visual C # 2008) sembra che il colore predefinito per i menu e i menu sia blu, che per me sembra davvero strano ed è qualcosa che mi piacerebbe davvero scavalcare. Immagino che Visual Studio stia rilevando questo colore blu dal tema di sistema selezionato o qualcosa del genere, tuttavia nessun'altra app di Windows in esecuzione sul mio sistema ha questo colore blu, quindi non so perché le mie app .NET dovrebbero averlo . ;)

Comunque, ho notato che se creo un'applicazione usando una versione precedente di Visual Studio (Visual Studio.NET), il colore di sfondo predefinito per menustrips e menu è il grigio standard che ti aspetteresti di vedere. Questa è una soluzione al problema suppongo, ma sembra una specie di stupido e mi piacerebbe davvero trovare un modo per sovrascriverlo nella versione corrente di Visual C #.

È stato utile?

Soluzione

DotNet 1.x non aveva un MenuStrip e utilizzava un menu Windows standard.

DotNet versioni 2.0 e successive hanno MenuStrip e VS 7 e versioni successive rimuovono MainMenu dalla casella degli strumenti e lo sostituiscono con un MenuStrip, che utilizza il tema Office Xp 2003, da cui la combinazione di colori blu per MenuStrip e ToolStrip.

MainMenu può ancora essere aggiunto alla casella degli strumenti per un menu Windows standard.

Altri suggerimenti

Imposta " RenderMode " opzione del MenuStrip su " Sistema " invece di " managerRenderMode "

:)

Hai provato a impostare il colore posteriore del tuo menuStrip? Dovresti essere in grado di fare qualcosa del tipo:

this.menuStrip1.BackColor = Color.FromKnownColor(KnownColor.Control);

Puoi creare il tuo Renderer

    public class BrowserMenuRenderer : ToolStripProfessionalRenderer
{
    public BrowserMenuRenderer() : base(new BrowserColors()) {}
}
public class BrowserColors : ProfessionalColorTable
{
    public override Color MenuItemSelected
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
    public override Color MenuItemBorder
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
    public override Color MenuItemSelectedGradientBegin
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
    public override Color MenuItemSelectedGradientEnd
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
}

Quindi hai appena impostato il renderer del tuo menustrip come YourRenderer

È possibile utilizzare la modalità di rendering ma questo imposta solo il tema di sistema come predefinito. .net ti permette di cambiare il backcolor e il colore for ma quando ci passi sopra mostra ancora i colori predefiniti. Ecco un modo per aggirare questo ...

il suo è molto semplice da realizzare usando " DropDownOpening " , " DropDownClosed " ;, e " MouseEnter " eventi.

private void fileToolStripMenuItem_DropDownOpening(object sender, EventArgs e){

    // When the user clicks on "File" it will change to red.
    fileToolStripMenuItem.ForeColor = Color.Red;
}

private void testToolStripMenuItem_MouseEnter(object sender, EventArgs e){

    // When the user hovers over a child of "file" called "test", "file" turns orange.
    fileToolStripMenuItem.ForeColor = Color.Orange;
}

private void test2ToolStripMenuItem_MouseEnter(object sender, EventArgs e){

    // When the user hovers on a child of "file" called "test2", "file" turns blue.
    fileToolStripMenuItem.ForeColor = Color.Blue;
}

private void fileToolStripMenuItem_DropDownClosed(object sender, EventArgs e){

    // When the user leaves the "file" menu, it gets restored back to black.
    fileToolStripMenuItem.ForeColor = Color.Black;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top