Come si modifica il colore di sfondo predefinito per menu e menu in .NET?
-
03-07-2019 - |
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 #.
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;
}