我读了一些其他文章,了解人们如何自定义 MenuStrip 的颜色和渐变。
我想要做的是删除渐变,以便 MenuStrip 与表单的其余部分具有相同的颜色,对我来说,这是创建新 WinForms 项目时使用的默认设置。我尝试将
RenderMode
更改为“系统”,它可以正常工作,但是当我构建并运行它时,它会留下一条与 MenuStrip 的长度相同的白线。我必须做一些绘画吗?或者有更简单的方法吗?
这与这个one
基本上是同一个问题答案引用了这个 Microsoft bug post
这似乎是从 2005 年开始就存在的问题。虽然评论说这是一个 MS 错误,不会被修复,但有一个解决方法,涉及实现你自己的渲染器:
public class MySR : ToolStripSystemRenderer
{
public MySR()
{
}
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
//base.OnRenderToolStripBorder(e);
}
}
然后您所要做的就是将菜单条的渲染器设置为您刚刚实现的渲染器:
menustrip1.Renderer = new MySR();
我刚刚尝试了一下,看起来效果很好。
我同意 Yetti 的观点,但如果你想维持你的边界,你可以尝试这个。将画笔替换为您的背景颜色
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
base.OnRenderToolStripBorder(e);
e.Graphics.FillRectangle(Brushes.Black, e.ConnectedArea);
}
@Yetti 的答案是正确的,但有一个小问题。它还删除了菜单下拉部分(单击某个项目时打开的菜单)的边框。为了避免这种情况,请在 OnRenderToolStripBorder 中执行以下操作:
public class MySR : ToolStripSystemRenderer
{
public MySR()
{
}
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
if (e.AffectedBounds == e.ToolStrip.Bounds) return;
base.OnRenderToolStripBorder(e);
}
}