【问题标题】:How to remove this strange visual artifact in the corner of ToolStrip Winforms control?如何去除 ToolStrip Winforms 控件一角的这种奇怪的视觉伪影?
【发布时间】:2012-01-21 14:11:31
【问题描述】:

这是显示问题的图片。看看右下角。

有人知道如何摆脱它吗?

将LayoutStyle 设置为VerticalStackWithOverflow 可以修复它,但也会将我不想要的项目水平居中。

我只想要一个像图片中那样的垂直堆栈,但右下角没有那条黑线。

【问题讨论】:

  • 我一直想知道那条小线到底是什么。
  • 很高兴我不是唯一一个:O

标签: c# .net winforms styling toolstrip


【解决方案1】:

在属性栏中,将“RenderMode”设置为“System”或使用

.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;

这样做会将 .BackColor 更改为“Control”,但您可以在之后根据需要进行更改。

【讨论】:

  • 我实际上检查过,它在将 BackColor 设置为 System 之前和之后使用 Control 打印 BackColor。所以我将背景颜色改为相同的颜色值。
  • 是的,但在您更改它之前,自定义渲染使用稍微不同的颜色 - 或者至少看起来 - 您可以看到两者的外观有惊人的差异。但是对于你正在做的事情,我认为设置你自己选择的平面颜色不会有问题 - 只有当容器有一些溢出时。 (根据大小,您可能根本看不到背景颜色!)
  • 其实只是尝试过,但手动设置实际值不起作用。控制设置为 240、240、240,但这样做无济于事。我假设它意识到已经使用这些值定义了颜色,因此使用它来代替。我将它设置为 245、245、245 并且它起作用了。
【解决方案2】:

我认为最好的办法是在属性中将RenderMode 设置为System,并将布局属性保留为HorizontalStackWithOverflow。 但前提是您不介意更改工具提示绘制样式。

【讨论】:

    【解决方案3】:

    很抱歉迟到了,但接受的答案不能满足我的需要。以下解决方案是我想出的:

    摆脱黑线

    1) 创建自定义渲染器:

    class CustomToolStripProfessionalRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
        {
            // Don't draw a border
        }
    }
    

    2) 使用自定义渲染器:

    toolStrip1.Renderer = new CustomToolStripProfessionalRenderer();
    

    摆脱背景

    上述解决方案满足了原始问题的需要,但我也不喜欢 ToolStrip 上的渐变背景。我希望 ToolStrip 成为一个“不可见”的容器:

    1) 创建自定义颜色表:

    class CustomProfessionalColorTable : ProfessionalColorTable
    {
        public override Color ToolStripGradientBegin
        {
            get { return SystemColors.Control; }
        }
    
        public override Color ToolStripGradientMiddle
        {
            get { return SystemColors.Control; }
        }
    
        public override Color ToolStripGradientEnd
        {
            get { return SystemColors.Control; }
        }
    }
    

    2) 使用自定义颜色表:

    class CustomToolStripProfessionalRenderer : ToolStripProfessionalRenderer
    {
        public CustomToolStripProfessionalRenderer()
            : base(new CustomProfessionalColorTable())
        {
    
        }
    
        protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
        {
            // Don't draw a border
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2015-11-03
      • 1970-01-01
      相关资源
      最近更新 更多