【问题标题】:How can I remove the white line drawn under a MenuStrip control?如何删除在 MenuStrip 控件下绘制的白线?
【发布时间】:2011-02-16 03:05:45
【问题描述】:

我阅读了其他几篇关于人们希望如何自定义 MenuStrip 的颜色和渐变的文章。

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

【问题讨论】:

    标签: c# .net winforms gradient menustrip


    【解决方案1】:

    这和这个one基本是同一个问题

    答案引用了这个Microsoft bug post

    这似乎是从 2005 年开始一直存在的问题。虽然 cmets 说这是一个无法修复的 MS 错误,但有一个解决方法是实现您自己的渲染器:

    public class MySR : ToolStripSystemRenderer
    {
        public MySR()
        {
        }
    
        protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
        {
            //base.OnRenderToolStripBorder(e);
        }
    }
    

    然后你所要做的就是将你的 menustrip 的渲染器设置为你刚刚实现的那个:

    menustrip1.Renderer = new MySR();
    

    我刚试了一下,感觉还不错。

    【讨论】:

    • 确实是一个重复的问题,但您在这里的回答要好得多。主要是因为您花时间复制和粘贴解决方法代码。
    • 这个 bug 到了 6 年和 2 个版本之后仍然没有修复,这对 MS 来说是毫无用处的!感谢您的回答 Yetti,我很感激。
    【解决方案2】:

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

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

    【讨论】:

    • 你可能只使用 Brushes.Black 而不是创建一个新的黑色画笔,你没有在你的例子中处理。
    • 谢谢。我不知道你能做到这一点。我编辑了上面的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 2020-08-10
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多