ToolStripProfessionalRenderer
を使用している場合は、バックカラーを変更してもハイライトカラーは変更されません。また、ツールストリップが1つのレンダラーを使用している場合、レンダラーはMenuItemSelectedColor
プロパティーをレンダーのProfessionalColorTable
という名前で使用するため、条件に基づいてハイライトカラーをレンダリングできません。
ToolStrip
のレンダラーを動的に変更し、そのレンダラーを目的の色でハイライト表示するレンダラーに設定することができます。ここで
私が使用した手順は次のとおりです。
(1)があなたのToolStrip
ManagerRenderMode
への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)ハンドル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
}
[類似の質問](http://stackoverflow.com/a/9260827/5753992) 「メニューホバーの色を変更する方法」 – Lester
@LarsTechリンクされた投稿は重複していません。 OPは**異なるToolStripMenuItems **に対して異なるハイライトカラーを使用します**。リンクされた投稿はそのような要件を満たしておらず、すべてのアイテムのハイライトカラーを変更する方法を提供します。 –