2016-05-04 39 views
1

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

P.S. - MouseEnter、MouseLeave、MouseHoverイベントは、ToolStripMenuItemsで機能するため動作しません。ハイライトの場合です。

+0

[類似の質問](http://stackoverflow.com/a/9260827/5753992) 「メニューホバーの色を変更する方法」 – Lester

+1

@LarsTechリンクされた投稿は重複していません。 OPは**異なるToolStripMenuItems **に対して異なるハイライトカラーを使用します**。リンクされた投稿はそのような要件を満たしておらず、すべてのアイテムのハイライトカラーを変更する方法を提供します。 –

答えて

2

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

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

enter image description here

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

(1)があなたのToolStripManagerRenderModeへのRenderModeを設定します。

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)ハンドルMouseEnterMouseLeaveイベントとこのハンドラをすべてに割り当てます。

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 
} 
+0

この解決策は機能しますが、問題は今です - もし私が最初のドロップダウンから2番目に、次に2番目から3番目に行くなら。 3回目のドロップダウンでのみ、他のすべてのドロップダウンを強調表示しながら、この機能を使用します。 –

+0

したがって、問題は実際には入れ子になったMenuItemにあります。私は親品目を強調したくありません。 –

+0

[link](http://s32.postimg.org/phspoxq9x/upload.png) –

関連する問題