¿Cómo cambia el color de fondo predeterminado para menustrips y menús en .NET?
-
03-07-2019 - |
Pregunta
En estos días con Visual C # (Visual C # 2008 específicamente) parece que el color predeterminado para menustrips y menús es azul, lo que para mí es realmente extraño y es algo que me gustaría anular. Supongo que Visual Studio está captando este color azul del tema de mi sistema seleccionado o algo así, sin embargo, ninguna otra aplicación de Windows que se ejecute en mi sistema tiene este color azul, así que no sé por qué mis aplicaciones .NET deberían tenerlo. . ;)
De todos modos, noté que si creo una aplicación utilizando una versión anterior de Visual Studio (Visual Studio.NET), el color de fondo predeterminado para menustrips y menús es el gris estándar que se espera ver. Supongo que esta es una solución al problema, pero parece una especie de estupidez y realmente me gustaría encontrar una manera de anularlo en la versión actual de Visual C #.
Solución
DotNet 1.x no tenía un MenuStrip, y usaba un menú estándar de Windows.
Las versiones DotNet 2.0 y superiores tienen MenuStrip, y VS 7 y arriba eliminan MainMenu de la caja de herramientas y lo reemplazan con un MenuStrip, que usa el tema Office Xp 2003, de ahí la combinación de colores azul para el MenuStrip y ToolStrip.
El MainMenu aún se puede agregar a la caja de herramientas para un menú estándar de Windows.
Otros consejos
Configura el " RenderMode " opción de MenuStrip a " Sistema " en lugar de " managerRenderMode "
:)
¿Ha intentado configurar el color de fondo de su menú Eliminar? Deberías poder hacer algo como:
this.menuStrip1.BackColor = Color.FromKnownColor(KnownColor.Control);
Puedes hacer tu propio Renderizador
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); }
}
}
Luego, simplemente configura el renderizador de su menustrip como YourRenderer
Puede usar el modo de renderización, pero eso solo establece el tema del sistema a predeterminado. .net le permite cambiar el color de fondo y el color, pero cuando se desplaza sobre él todavía muestra los colores predeterminados. Aquí hay una manera de evitar eso ...
es muy sencillo de lograr utilizando el comando " DropDownOpening " , " DropDownClosed " y " MouseEnter " eventos.
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;
}