Как изменить цвет фона по умолчанию для элементов меню и менюшек в .NET?

StackOverflow https://stackoverflow.com/questions/617224

  •  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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top