web-dev-qa-db-ja.com

メニューのホバー色を変更する方法

Windowsアプリケーションメニューのホバー(マウスオーバー)の色を変更する方法は?

C#の任意のメソッド

OR

何らかの方法でWindows API(DllImport)を使用して?

画像を見る:

enter image description here

24
Sreekumar P

MenuStripクラスを使用しています。そのレンダラーをオーバーライドできます。ここに例があります。あなた自身の色を選んでください。

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        menuStrip1.Renderer = new MyRenderer();
    }

    private class MyRenderer : ToolStripProfessionalRenderer {
        public MyRenderer() : base(new MyColors()) {}
    }

    private class MyColors : ProfessionalColorTable {
        public override Color MenuItemSelected {
            get { return Color.Yellow; }
        }
        public override Color MenuItemSelectedGradientBegin {
            get { return Color.Orange; }
        }
        public override Color MenuItemSelectedGradientEnd {
            get { return Color.Yellow; }
        }
    }
}

ProfessionalColorTable の他のプロパティは、他の色要素を制御します。

60
Hans Passant

マウスオーバーのボーダーの色(アイテム)を変更するには、次のようにします。

public override Color MenuItemBorder  
{
    get { return Color.Green; }
}
8
Cesar BA

同様の質問があり、多くの記事、多くのフォーラムを調べましたが、私の質問に対する完全な答えは見つかりませんでした。ドロップダウンメニュー要素のホバーに問題があるだけでなく、背景と全体的なレイアウト、およびプログラムでサブ要素を追加する方法に問題がありました。次に、StackoverflowフォーラムでMenuStripを静かに簡単にカスタマイズする方法を見つけましたが、それでもドロップダウンで問題が発生しました。次に、ContextMenuStipには目的を達成するためのプロパティがあることを自分で確認します。ドロップダウンメニューとして、MenuStripやContextMenuStripを簡単に追加できます。ああ、はい:これの美しさは、特別なコンポーネントを使用する必要がないことです。

したがって、手順は次のとおりです:

  1. カラーテーブルが必要です。
  2. MenuStripで使用する必要があります。
  3. MenuStripのToolStripMenuItemsには、DropDownとしてContextMenuStripが必要です。
  4. ToolStripMenuItems.Items [?]。DropDownItems関数を使用すると、ドロップダウン要素として表示されるサブ要素を簡単に操作できます。

1.-カラーテーブル:

    public class submenuColorTable : ProfessionalColorTable
    {
        public override Color MenuItemSelected
        {
            get { return ColorTranslator.FromHtml("#302E2D"); }
        }

        public override Color MenuItemBorder
        {
            get { return Color.Silver; }
        }

        public override Color ToolStripDropDownBackground
        {
            get { return ColorTranslator.FromHtml("#21201F"); }
        }

        public override Color ToolStripContentPanelGradientBegin
        {
            get { return ColorTranslator.FromHtml("#21201F"); }
        }
    }

    public class LeftMenuColorTable : ProfessionalColorTable
    {
        public override Color MenuItemBorder
        {
            get { return ColorTranslator.FromHtml("#BAB9B9"); }
        }

        public override Color MenuBorder  //added for changing the menu border
        {
            get { return Color.Silver; }
        }

        public override Color MenuItemPressedGradientBegin
        {
            get { return ColorTranslator.FromHtml("#4C4A48"); }
        }
        public override Color MenuItemPressedGradientEnd
        {
            get { return ColorTranslator.FromHtml("#5F5D5B"); }
        }            

        public override Color ToolStripBorder
        {
            get { return ColorTranslator.FromHtml("#4C4A48"); }
        }

        public override Color MenuItemSelectedGradientBegin
        {
            get { return ColorTranslator.FromHtml("#4C4A48"); }
        }

        public override Color MenuItemSelectedGradientEnd
        {
            get { return ColorTranslator.FromHtml("#5F5D5B"); }
        }

        public override Color ToolStripDropDownBackground
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }

        public override Color ToolStripGradientBegin
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }

        public override Color ToolStripGradientEnd
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }

        public override Color ToolStripGradientMiddle
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }
    }

2.- MenuStripでの使用:

menuStrip.Renderer = new ToolStripProfessionalRenderer(new LeftMenuColorTable());

3.-メニュー要素へのプログラムによるContextMenuStripの追加

        ContextMenuStrip CMS = new ContextMenuStrip()
        {
            Renderer = new ToolStripProfessionalRenderer(new submenuColorTable()),
            ShowImageMargin = false
        };

        ToolStripMenuItem TSMI = new ToolStripMenuItem("Button name")
        {
            BackColor = sampleMenuItem.BackColor,
            ForeColor = sampleMenuItem.ForeColor,
            Font = sampleMenuItem.Font,
            Margin = sampleMenuItem.Margin,
            Padding = sampleMenuItem.Padding,
            Size = sampleMenuItem.Size,
            TextAlign = sampleMenuItem.TextAlign,
            DropDown = CMS 
        };

        menuStrip.Items.Add(TSMI);

4.-サブエレメントを操作します

ここでは、ドロップダウンメニューの要素を操作(例:追加)できます。色、サイズ、その他のプロパティは、この方法でテストに使用されます。定数または異なる値を使用できます。 ( "i"はサブエントリを追加するメニューボタンインデックスです)

        ToolStripMenuItem newItem = new ToolStripMenuItem("Button Name", null, ToolStripMenuItem_Click)
        {
            Text = "Button Name",
            BackColor = toolStripMenuItem01.BackColor,
            ForeColor = toolStripMenuItem01.ForeColor,
            Font = toolStripMenuItem01.Font,
            Margin = toolStripMenuItem01.Margin,
            Padding = toolStripMenuItem01.Padding,
            Size = toolStripMenuItem01.Size
        };

        ((ToolStripMenuItem)menuStrip.Items[i]).DropDownItems.Add(newItem);

結果は私の場合次のとおりです:

Submenu with programmatically added elements.

これは他の人に役立つかもしれません。読んでくれてありがとう!幸せなコーディング! :)

6
ThomAce

また、それを透明(非表示)にすることもできます。

get { return Color.Transparent; }
2
Be Maneuver