Pergunta

Estes dias, com o Visual C # (Visual C # 2008, especificamente), parece que a cor padrão para menustrips e menus é azul, o que me parece muito estranho e é algo que eu realmente gostaria de substituição. Eu estou supondo que Visual Studio está pegando essa cor azul do meu tema do sistema selecionado ou algo, no entanto nenhum outro aplicativo do Windows em execução no meu sistema tem essa cor azul, então eu não sei por que meus aplicativos .NET teria que tê-lo . ;)

De qualquer forma, eu percebi que se eu criar um aplicativo usando uma versão mais antiga do Visual Studio (Visual Studio.NET), a cor de fundo padrão para menustrips e menus é a cinza padrão que seria de esperar para ver. Esta é uma solução para o problema suponho, mas parece que tipo de um estúpido e eu realmente gostaria de encontrar uma maneira de substituí-lo na versão atual do Visual C #.

Foi útil?

Solução

DotNet 1.x não têm um MenuStrip, e usou um menu padrão do Windows.

DotNet versões 2.0 e até ter o MenuStrip, e VS 7 e se remove o MainMenu da caixa de ferramentas e substitui-lo com um MenuStrip, que usa o Office Xp 2003 tema, portanto, o esquema de cor azul para o MenuStrip e ToolStrip.

O MainMenu ainda pode ser adicionado à caixa de ferramentas para um menu padrão do Windows.

Outras dicas

Defina o " RenderMode " opção do MenuStrip para " Sistema " em vez de "managerRenderMode"

:)

Você já tentou definir a cor de trás de sua MenuStrip? Você deve ser capaz de fazer algo como:

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

Você pode fazer próprio 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); }
    }
}

Em seguida, você apenas definir renderizador do seu MenuStrip como YourRenderer

Você pode usar o modo de renderização, mas que só define o tema do sistema para o padrão. .net permite que você altere o backcolor eo de cor, mas quando você passa o mouse sobre ele Ele ainda mostra as cores padrão. Aqui está uma maneira de contornar isso ...

seu é muito simples de realizar, utilizando o "DropDownOpening", "DropDownClosed", e eventos "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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top