You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ToolStripProfessionalRenderer自定义WinForms菜单边框颜色?

自定义WinForms菜单边框(ToolStripProfessionalRenderer)

菜单边框问题示例

我使用ToolStripProfessionalRenderer实现了自定义WinForms菜单,现希望自定义菜单边框以适配当前样式。当前显示的是WinForms默认边框颜色,因黑色背景显得更浅。菜单背景为常规颜色时,首个菜单项和子项的背景色与边框色一致,上边框不可见;但我将菜单背景改为黑色后,需至少把上边框颜色改为黑色。我曾尝试设置单个菜单项背景色解决,却发现下拉菜单边框不属于单个菜单项,请问该如何实现?


解决方法

下拉菜单的边框由ToolStripProfessionalRenderer统一绘制,不属于单个菜单项,因此需要重写渲染器的边框绘制方法来实现自定义。

1. 创建自定义渲染器类

继承ToolStripProfessionalRenderer,重写OnRenderToolStripBorder方法,针对性处理下拉菜单的边框绘制逻辑:

public class CustomMenuRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        // 仅对下拉菜单控件处理边框
        if (e.ToolStrip is ToolStripDropDown dropDown)
        {
            // 自定义边框颜色为黑色
            using (Pen borderPen = new Pen(Color.Black))
            {
                // 绘制完整边框,若仅需上边框则替换为DrawLine
                e.Graphics.DrawRectangle(borderPen, 0, 0, dropDown.Width - 1, dropDown.Height - 1);
            }
        }
        else
        {
            // 其他ToolStrip控件保留默认渲染逻辑
            base.OnRenderToolStripBorder(e);
        }
    }

    // 若需统一设置黑色背景,可重写背景渲染方法
    protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
    {
        if (e.ToolStrip is ToolStripDropDown)
        {
            using (SolidBrush bgBrush = new SolidBrush(Color.Black))
            {
                e.Graphics.FillRectangle(bgBrush, e.AffectedBounds);
            }
        }
        else
        {
            base.OnRenderToolStripBackground(e);
        }
    }
}

2. 为菜单控件应用自定义渲染器

在窗体初始化时,将菜单的渲染器替换为自定义类:

public YourForm()
{
    InitializeComponent();
    // 给主菜单设置自定义渲染器
    menuStrip1.Renderer = new CustomMenuRenderer();
    // 上下文菜单同样需要设置
    contextMenuStrip1.Renderer = new CustomMenuRenderer();
}

可选:仅修改上边框

如果只需要调整上边框颜色,可将DrawRectangle替换为单一线条绘制:

e.Graphics.DrawLine(borderPen, 0, 0, dropDown.Width - 1, 0);

内容的提问来源于stack exchange,提问作者Roberto D V Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:48:27