小智 46

这是"系统"渲染器中的错误,此错误报告中的详细信息.

微软的回复提供了一个非常简单的解决方法:

1)创建一个子类ToolStripSystemRenderer,覆盖OnRenderToolStripBorder并使其成为无操作:

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

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        //base.OnRenderToolStripBorder(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

2)使用该渲染器作为工具条:

toolStrip3.Renderer = new MySR();
Run Code Online (Sandbox Code Playgroud)

  • +1,但我已经编辑了答案,实际上*包括*答案,而不是只指向它.StackOverflow应该独立,外部链接可以腐烂.他们是一个很好的辅助,但主要内容应该是SO本身. (8认同)

小智 9

您可能希望添加类型检查以避免错过ToolStripDropDownMenu/ etc 上的边框.(从继承自ToolStrip,它会自动启动相同的自定义渲染器用法):

protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
    if (e.ToolStrip.GetType() == typeof(ToolStrip))
    { 
        // skip render border
    }
    else
    {
        // do render border
        base.OnRenderToolStripBorder(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

错过的ToolStripDropDownMenu边界在使用时并不那么明显,ToolStripSystemRenderer但却成为真正的眼睛ToolStripProfessionalRenderer.

此外,System.Windows.Forms.ToolStripManager.Renderer = new MySR();如果您希望默认情况下ToolStrip使用appwide的所有实例,则设置可能很有用MySR.