如何在winform c#中禁用工具条下的行?

时间:2009-12-16 22:26:11

标签: c# winforms toolstrip

3 个答案:

答案 0 :(得分:46)

这是“系统”渲染器中的错误,详情请参见this bug report

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

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

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

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

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

toolStrip3.Renderer = new MySR();

答案 1 :(得分:9)

您可能需要添加类型检查以避免在ToolStripDropDownMenu /等上丢失边框。 (由于继承自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会成为真正的眼睛。

另外,如果您希望appwide的所有System.Windows.Forms.ToolStripManager.Renderer = new MySR();个实例默认使用ToolStrip,那么设置MySR可能会很有用。

答案 2 :(得分:1)

比其他课程更完整!

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

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        if (!(e.ToolStrip is ToolStrip))
            base.OnRenderToolStripBorder(e);
    }
}