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

私が使用した手順は次のとおりです。
(1)を に設定しRenderMode
ます。ToolStrip
ManagerRenderMode
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
}