Как изменить цвет фона по умолчанию для элементов меню и менюшек в .NET?
-
03-07-2019 - |
Вопрос
В наши дни с Visual C # (в частности, Visual C # 2008) кажется, что цвет по умолчанию для строк меню - синий, что для меня выглядит действительно странно и это то, что я действительно хотел бы переопределить.Я предполагаю, что Visual Studio использует этот синий цвет из выбранной мной системной темы или что-то в этом роде, однако ни одно другое приложение Windows, работающее в моей системе, не имеет этого синего цвета, поэтому я не знаю, почему мои приложения .NET должны иметь его.;)
Во всяком случае, я заметил, что если я создаю приложение, используя более старую версию Visual Studio (Visual Studio.NET), цвет фона по умолчанию для панелей меню - стандартный серый, который вы ожидаете увидеть.Я полагаю, это одно из решений проблемы, но оно кажется довольно глупым, и я бы действительно хотел найти способ переопределить его в текущей версии Visual C #.
Решение
DotNet 1.x не имел MenuStrip и использовал стандартное меню Windows.
DotNet версии 2.0 и выше имеют MenuStrip, а VS 7 и выше удаляет MainMenu из панели инструментов и заменяет его на MenuStrip, в котором используется тема Office Xp 2003, отсюда синяя цветовая схема для MenuStrip и ToolStrip.
MainMenu можно добавить в панель инструментов для стандартного меню Windows.
Другие советы
Установите "Режим отображения" опция меню для "Система" вместо "managerRenderMode"
:)
Вы пытались установить задний цвет вашего menuStrip? Вы должны быть в состоянии сделать что-то вроде:
this.menuStrip1.BackColor = Color.FromKnownColor(KnownColor.Control);
Вы можете сделать собственный рендерер
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); }
}
}
Тогда вы просто устанавливаете средство визуализации своей Menustrip как YourRenderer
Вы можете использовать режим рендеринга, но это только устанавливает системную тему по умолчанию..net позволяет вам изменять backcolor и for color, но при наведении на него курсора мыши по-прежнему отображаются цвета по умолчанию.Вот способ обойти это...
это очень просто сделать с помощью событий "DropDownOpening", "DropDownClosed" и "MouseEnter".
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;
}