.NET でメニューストリップとメニューのデフォルトの背景色を変更するにはどうすればよいですか?

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

  •  03-07-2019
  •  | 
  •  

質問

最近の Visual C# (特に Visual C# 2008) では、メニューストリップとメニューのデフォルトの色が青になっているようですが、これは私には非常に奇妙に見えるので、ぜひオーバーライドしたいと考えています。Visual Studio は、選択したシステム テーマか何かからこの青色を取得しているのだと思いますが、システム上で実行されている他の Windows アプリにはこの青色がないため、.NET アプリになぜこの青色が必要なのかわかりません。 。;)

とにかく、古いバージョンの Visual Studio (Visual Studio.NET) を使用してアプリケーションを作成すると、メニューストリップとメニューのデフォルトの背景色が、予想される標準の灰色になることに気付きました。これは問題に対する 1 つの解決策だと思いますが、ちょっと愚かな解決策のような気がするので、現在のバージョンの Visual C# でこれをオーバーライドする方法を見つけたいと思っています。

役に立ちましたか?

解決

DotNet 1.xにはMenuStripがなく、標準のWindowsメニューを使用していました。

DotNetバージョン2.0以降にはMenuStripがあり、VS 7以降ではツールボックスからMainMenuが削除され、Office Xp 2003テーマを使用するMenuStripに置き換えられます。 MenuStripおよびToolStrip用。

MainMenuは、標準のWindowsメニューのツールボックスに追加できます。

他のヒント

" RenderMode "を設定しますMenuStripのオプションを" System " " 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); }
    }
}

次に、メニューストリップのレンダラーをYourRendererとして設定します

レンダリング モードを使用することもできますが、それはシステム テーマをデフォルトに設定するだけです。.net では、背景色と色を変更できますが、その上にマウスを置くと、デフォルトの色が表示されます。それを回避する方法があります...

これは、「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