【问题标题】:How to disable the line under tool strip in winform c#?如何在winform c#中禁用工具条下的行?
【发布时间】:2010-12-27 10:57:48
【问题描述】:

这条线?

【问题讨论】:

  • 你是怎么得到背景白色的?这不是标准的。

标签: c# winforms toolstrip


【解决方案1】:

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

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

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();

【讨论】:

  • +1,但我已将答案编辑为实际 include 答案,而不仅仅是指向它。 StackOverflow 应该是独立的,外部链接可能会腐烂。它们是一个很好的辅助,但主要内容应该是 SO 本身。
  • 为什么这会关闭我的应用程序?
【解决方案2】:

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

使用ToolStripSystemRenderer 时错过的ToolStripDropDownMenu 边框并不那么明显,但使用ToolStripProfessionalRenderer 时会变得非常碍眼。

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

【讨论】:

    【解决方案3】:

    这门课比其他的更全!

    public class ToolStripRender : ToolStripProfessionalRenderer
    {
        public ToolStripRender() : base() { }
    
        protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
        {
            if (!(e.ToolStrip is ToolStrip))
                base.OnRenderToolStripBorder(e);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2013-01-27
      相关资源
      最近更新 更多