我创建了一个Windows窗体工具,并添加了一个包含多个项目的菜单条和一个下拉菜单。一切正常,当我选择下拉菜单项"文件"时,它会正确展开。但是,当光标离开工具条菜单项"文件"到下拉菜单项时,它会自动将其颜色更改为白色,以便您无法再阅读白色文本:
未点击的菜单条
单击菜单条,鼠标光标在下拉项上
我之前在菜单条的颜色变化方面也遇到过类似的问题,所以我已经定义了一个渲染器:
class BlueRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
if (!e.Item.Selected)
{
base.OnRenderMenuItemBackground(e);
e.Item.BackColor = Color.MediumBlue;
}
else
{
Rectangle rc = new Rectangle(Point.Empty, e.Item.Size);
e.Graphics.FillRectangle(Brushes.Blue, rc);
e.Graphics.DrawRectangle(Pens.MediumBlue, 1, 0, rc.Width - 2, rc.Height - 1);
e.Item.BackColor = Color.MediumBlue;
base.OnRenderItemBackground(e);
e.Item.BackColor = Color.MediumBlue;
}
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
base.OnRenderItemText(e);
if (!e.Item.Selected)
{
e.Item.ForeColor = SystemColors.ControlLightLight;
}
else
{
e.Item.ForeColor = SystemColors.ControlLightLight;
}
}
}
我想我必须更改渲染器中的另一个属性或行为,但我什至不知道是哪一个以及如何更改它。请帮助我在鼠标光标离开此元素时简单地将项目颜色保留为蓝色/中蓝色。
干杯
佛瑞恩
通过尝试几个渲染器选项找到了解决方案:我删除了我以前的"BlueRenderer",并指定了一个ProfessionalColorTable:
public class ownColorTable : System.Windows.Forms.ProfessionalColorTable
{
public override Color MenuItemPressedGradientBegin
{
get
{
return Color.Blue;
}
}
public override Color MenuItemPressedGradientEnd
{
get
{
return Color.Blue;
}
}
然后我启动了ToolStripProfessionalRenderer,如下所示:
menuStrip1.Renderer = new ToolStripProfessionalRenderer(new ownColorTable());