简体   繁体   English

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

[英]How to disable the line under tool strip in winform c#?

替代文字

this line ?这条线?

It's a bug in the "system" renderer, details in this bug report .这是“系统”渲染器中的错误此错误报告中的详细信息。

Microsoft's response gives a very easy workaround:微软的回应提供了一个非常简单的解决方法:

1) Create a subclass of ToolStripSystemRenderer , overriding OnRenderToolStripBorder and making it a no-op: 1) 创建ToolStripSystemRenderer的子类,覆盖OnRenderToolStripBorder并使其成为无操作:

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

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

2) Use that renderer for your toolstrip. 2) 将该渲染器用于您的工具条。 The renderer must be assigned after any assignment to the toolstrip's RenderMode property or it will be overwritten with a reference to a System.Windows.Forms renderer.必须在对工具条的 RenderMode 属性进行任何分配之后分配渲染器,否则它将被对 System.Windows.Forms 渲染器的引用覆盖。

toolStrip3.Renderer = new MySR();

You might want to add type check to avoid missing border on ToolStripDropDownMenu /etc.您可能希望添加类型检查以避免在ToolStripDropDownMenu /etc 上丢失边框。 (since inherited from ToolStrip , it starts same custom renderer usage automatically): (由于继承自ToolStrip ,它会自动启动相同的自定义渲染器使用):

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

Missed ToolStripDropDownMenu border is not so noticable while using ToolStripSystemRenderer but become real eyesore with ToolStripProfessionalRenderer .错过ToolStripDropDownMenu同时使用边界并不是那么noticable ToolStripSystemRenderer但成为真正的眼中钉ToolStripProfessionalRenderer

Also, setting System.Windows.Forms.ToolStripManager.Renderer = new MySR();另外,设置System.Windows.Forms.ToolStripManager.Renderer = new MySR(); could be usefull if you want all ToolStrip instances appwide to use MySR by default.如果您希望应用范围内的所有ToolStrip实例默认使用MySR ,这可能会MySR用。

This class is more complete than other!这门课比其他课更完整!

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM