gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:14:10 29 4
gpt4 key购买 nike

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

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

enter image description here

我怎样才能避免这种情况?我已将 ToolStripContainer 的填充和边距设置为 0,并尝试了不同的渲染模式,但似乎无济于事。有什么想法吗?

最佳答案

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

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

结果:

ToolStripContainer with RowMargin of 0

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

编辑 2:好的,我明白了。它是由 ToolStrip 的渲染器完成的。在此示例中,我使用 System 作为 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);
}


结果:
ToolStrip panel with RowMargin of 0 and no 2 pixel border

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

关于c# - 如何避免 Winforms 中 ToolStrip 左侧的 3 像素间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14924939/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com