1

ドロップダウンに他の 3 つの ToolStripMenuItems を含む 1 つの ToolStripMenuItem オブジェクトがあります。異なる ToolStripMenuItems の MouseHover で異なるハイライト色を使用したい。はい、グリーンと言ってください。いいえ - 赤。MayBe の場合 - 青。異なるアイテム間を移動すると、それに応じてハイライトの色が変化するはずです。助けてください。

PS - MouseEnter、MouseLeave、MouseHover イベントは ToolStripMenuItems で動作し、それはHighlighterの場合であるため、動作しません。

4

1 に答える 1

3

を使用している場合ToolStripProfessionalRenderer、バックの色を変更してもハイライトの色は変わりません。また、ツール ストリップは単一のレンダラーを使用しますが、レンダラーはレンダラーMenuItemSelectedColorのプロパティを 使用ProfessionalColorTableするため、条件に基づいてハイライト カラーをレンダリングできません。

ToolStripのレンダラーを動的に変更し、そのレンダラーを目的の色でハイライトを描画するレンダラーに設定できます。

ここに画像の説明を入力

私が使用した手順は次のとおりです。

(1)を に設定しRenderModeます。ToolStripManagerRenderMode

this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;

(2)渡すことができるカスタム カラー テーブルを作成しますMenuItemSelectedColor

public class MyColorTable : ProfessionalColorTable
{
    private Color menuItemSelectedColor;
    public MyColorTable(Color color): base()
    {
        menuItemSelectedColor = color;
    }
    public override Color MenuItemSelected
    {
        get { return menuItemSelectedColor; }
    }
}

(3)フォーム レベルで必要なレンダラーを定義します。

ToolStripProfessionalRenderer r = 
    new ToolStripProfessionalRenderer(new MyColorTable(Color.Red));
ToolStripProfessionalRenderer g = 
    new ToolStripProfessionalRenderer(new MyColorTable(Color.Green));
ToolStripProfessionalRenderer b = 
    new ToolStripProfessionalRenderer(new MyColorTable(Color.Blue));

(4)カスタム レンダラーを使用するすべてのメニュー項目のハンドルMouseEnterとイベントを処理し、このハンドラーをそれらすべてに割り当てます。MouseLeave

private void menuItem_MouseEnter(object sender, EventArgs e)
{
    var item = (ToolStripMenuItem)sender;
    if (item.Text == "Yes")
        ToolStripManager.Renderer = g;
    else if (item.Text == "No")
        ToolStripManager.Renderer = r;
    else if (item.Text == "MayBe")
        ToolStripManager.Renderer = b;
    else
        ToolStripManager.Renderer = null; // or use your default renderer
}

private void menuItem_MouseLeave(object sender, EventArgs e)
{
    ToolStripManager.Renderer = null; // or use your default renderer
}
于 2016-05-04T15:02:27.360 に答える