【问题标题】:How to remove padding in Label control?如何删除标签控件中的填充?
【发布时间】:2013-10-28 17:08:14
【问题描述】:

如何完全删除标签控件中的填充?

我尝试将 Margin 和 Padding 属性设置为零,但 Label 内的边距像素仍然很少。

我希望 Windows 窗体中的左右填充为零或非常小(小于“空格”字符宽度的一半)。

对于放置在非常靠近其他标签的标签,我需要这个,但是当我非常靠近放置标签时 - 放置在顶部的标签的背景覆盖了其他标签文本。我在一个标签上使用右对齐,在另一个标签上使用左对齐,它看起来像这样:

无论 AutoSize 属性如何,我都有这个问题。控件右侧的填充总是太多。

在 WPF 中,它可以按我的意愿工作,但我必须使用 Windows 窗体。

我不能使用 TextBox 控件(它可以在我想要的地方工作),因为它不支持透明背景。

【问题讨论】:

  • Margin 和 Padding 与它无关,即 TextFormatFlags.GlyphOverhangPadding,为 Label 控件启用。它可以防止某些字形,尤其是斜体字形,落在边界框之外。摆脱它的一种简单但粗略的方法是将标签的 UseCompatibleTextRendering 属性设置为 True。让标签重叠只是没有正确设置 Location 属性的一种情况。
  • 标签不包含属性TextFormatFlags。我找错地方了?
  • 是的,您必须查看 Label 控件的源代码。
  • 你可能不理解我。我有背景重叠的问题,因为我必须以这种方式(错误的方式)放置标签,因为我希望 2 个相邻标签中的字符之间有狭窄的空间。
  • 那么如何更改 TextFormatFlags?

标签: .net winforms


【解决方案1】:

尝试将 UseCompatibleTextRendering 属性设置为 true

【讨论】:

  • 这为我解决了!我在标签内有不需要的填充/边距。现在它消失了。
  • 你可以通过解释为什么会这样来改进这个答案(我当然想知道)。
【解决方案2】:

如果您自己绘制文本,您可以完全删除填充。这是一个简单的自定义标签控件(RightAlignment 属性更改文本对齐方式)

public partial class NoPaddingLabel : Label
{
    private TextFormatFlags flags = TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.NoPadding;

    public bool RightAlignment
    {
        get
        {
            return (flags & TextFormatFlags.Right) == TextFormatFlags.Right;
        }
        set
        {
            if (value)
            {
                flags = flags |= TextFormatFlags.Right;
            }
            else
            {
                flags = flags &= ~TextFormatFlags.Right;
            }
            Invalidate();
        }
    }


    public NoPaddingLabel()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        TextRenderer.DrawText(e.Graphics, this.Text, this.Font, ClientRectangle, this.ForeColor, Color.Transparent, flags);
    }

}

【讨论】:

    【解决方案3】:

    我使用 Canvas 布局来解决这个问题:

    <Canvas>
       <Label Canvas.Left="35" Canvas.Top="0" Content="Latitude:" HorizontalAlignment="Right" Foreground="red"/>
       <Label Canvas.Left="90" Canvas.Top="0" Content="nn.nnnnnn" Foreground="red" />
       <Label Canvas.Left="25" Canvas.Top="12"  Content="Longitude:" HorizontalAlignment="Right" Foreground="red"/>
       <Label Canvas.Left="90" Canvas.Top="12"  Content="nn.nnnnnn" Foreground="red" />
       <Label Canvas.Left="40" Canvas.Top="26"  Content="Date" HorizontalAlignment="Center" Foreground="Blue"/>
       <Label Canvas.Left="100" Canvas.Top="26"  Content="Time" HorizontalAlignment="Center" Foreground="Blue"/>
    </Canvas>
    

    【讨论】:

    • 问题标记为 winforms,而不是 wpf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多