2

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

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

在此处输入图像描述

我怎样才能避免这种情况?我已将 ToolStripContainer 的填充和边距设置为 0,并尝试了不同的 RenderMode,但似乎没有任何帮助。有任何想法吗?

4

1 回答 1

5
public Form1()
{
    InitializeComponent();
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0);
}

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

结果:

RowMargin 为 0 的 ToolStripContainer

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

编辑2:好的,我想通了。它是由ToolStrip's 渲染器完成的。在此示例中,我使用Systemas RenderMode,因此我在项目中添加了一个新类,该类继承ToolStripSystemRenderer并覆盖了该OnRenderToolStripBorder方法,并注释掉了对基方法的调用。

using System.Windows.Forms;

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


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

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


结果:
RowMargin 为 0 且无 2 像素边框的 ToolStrip 面板

编辑3:所以我今天发现这是一个已知的错误ToolStripSystemRenderer。我想我没有找到它,因为我最初认为它与ToolStripContainer. 无论如何,对于那些有帮助的人,这里有一个关于工具条“边界”的问题。https://stackoverflow.com/a/2060360/2056131

于 2013-02-23T02:48:08.287 回答