如何避免Winforms中ToolStrip左侧的3像素间隙?

Dan*_*n W 2 c# margin padding toolstrip winforms

我正在使用Windows 7和Winforms/C#.

当我将工具条添加到工具条容器时,我在工具条左侧获得3个像素的空间.即使我将位置设置为0,0,它也会将其重置为3,0.这是一张图片来证明这一点:

在此输入图像描述

我怎么能避免这个?我已经将ToolStripContainer的填充和边距设置为0,并尝试使用不同的RenderModes,但似乎没有任何帮助.有任何想法吗?

spa*_*967 5

public Form1()
{
    InitializeComponent();
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0);
}
Run Code Online (Sandbox Code Playgroud)

只需在其中设置RowMarginToolStripPanels 的属性即可ToolStripContainer.它在设计器中不可用,因此需要在代码中设置,如上所示.显然默认情况下,该Left属性RowMargin设置为3.这就是当您将其设置为0时位置没有更改的原因.

结果:

ToolStripContainer,RowMargin为0

编辑:我似乎激起了自己的好奇心.现在我想看看我是否可以摆脱底部的2像素间隙.到目前为止,这个似乎要难以追踪.

编辑2:好的,我明白了.这是由ToolStrip渲染者完成的.在这个例子中,我使用的SystemRenderMode,所以我在项目中添加了一个新类,它继承ToolStripSystemRenderer并覆盖了OnRenderToolStripBorder方法,并注释掉了对base方法的调用.

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class MyToolStripSystemRenderer : ToolStripSystemRenderer
    {
        protected override void  OnRenderToolStripBorder(ToolStripRenderEventArgs e)
        {
            //base.OnRenderToolStripBorder(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


然后我在表单的构造函数中添加了另一行来分配自定义渲染器.

public Form1()
{
    InitializeComponent();
    this.toolStrip1.Renderer = new MyToolStripSystemRenderer();
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0);
}
Run Code Online (Sandbox Code Playgroud)


结果:
RowSarip面板,RowMargin为0且没有2像素边框

编辑3:所以今天我发现这是一个已知的错误ToolStripSystemRenderer.我想我没有找到它,因为我最初认为它与它有关ToolStripContainer.无论如何,对于那些有帮助的人来说,这是一个关于工具条"边界"的问题./sf/answers/144225231/