2011-02-16 113 views
5

我读了几篇关于人们想要如何自定义MenuStrip的颜色和渐变的文章。如何删除在MenuStrip控件下绘制的白线?

我想要做的是删除渐变,以便MenuStrip与窗体的其余部分颜色相同,对于我来说,这是创建新的WinForms项目时使用的默认设置。我试着将RenderMode更改为“系统”,它的工作原理有点类似,但是当我构建并运行它时,它会在MenuStrip的长度上留下一条白线。我必须做一些绘画和绘画吗?还是有更简单的方法?

回答

7

这基本上是因为这one

答案引用同样的问题,这Microsoft bug post

这似乎是一个问题,从2005年开始一路虽然评论说,这是一个错误的MS这将不固定,还有一种涉及实现自己的渲染解决方法:

public class MySR : ToolStripSystemRenderer 
{ 
    public MySR() 
    { 
    } 

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
    { 
     //base.OnRenderToolStripBorder(e); 
    } 
} 

然后,所有你需要做的就是设置你的MenuStrip的渲染到你刚刚实施的一个:

menustrip1.Renderer = new MySR(); 

我刚试过,它似乎工作得很好。

+1

确实是一个重复的问题,但你的答案在这里要好得多。主要是因为您花时间复制并粘贴了解决方法代码。 – 2011-02-16 04:12:04

+1

这个bug对于这个bug来说是相当无用的,大约6年,后来2个版本,它仍然没有修复!感谢您的回答Yetti,我很感激。 – BrandNewDev 2011-02-16 09:14:07

2

我同意Yetti,但如果你想保持你的边界,你可以试试这个。用你的背景替换画笔颜色

protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
{ 
    base.OnRenderToolStripBorder(e); 
    e.Graphics.FillRectangle(Brushes.Black, e.ConnectedArea); 
}