14

替代文字

这条线?     

4

3 回答 3

52

这是“系统”渲染器中的一个错误,此错误报告中的详细信息。

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

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

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

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

2)将该渲染器用于您的工具条。必须在对工具条的 RenderMode 属性进行任何分配之后分配渲染器,否则它将被对 System.Windows.Forms 渲染器的引用覆盖。

toolStrip3.Renderer = new MySR();
于 2010-01-13T21:20:28.790 回答
11

您可能需要添加类型检查以避免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);
    }
}

使用时遗漏ToolStripDropDownMenu的边框不那么明显,ToolStripSystemRenderer但使用ToolStripProfessionalRenderer.

此外,如果您希望应用程序范围内的所有实例默认使用,设置System.Windows.Forms.ToolStripManager.Renderer = new MySR();可能会很有用。ToolStripMySR

于 2013-07-03T00:59:34.093 回答
2

这堂课比其他的更完整!

public class ToolStripRender : ToolStripProfessionalRenderer
{
    public ToolStripRender() : base() { }

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        if (!(e.ToolStrip is ToolStrip))
            base.OnRenderToolStripBorder(e);
    }
}
于 2020-01-07T15:43:13.287 回答