如何删除Label控件中的填充?

时间:2013-10-28 17:08:14

标签: .net winforms

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

我尝试将Margin和Padding属性设置为零,但我仍然在Label中有少量像素边距。

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

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

padding

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

在WPF中它可以正常工作,但我必须使用Windows窗体。

我无法使用TextBox控件(它可以按我的意愿工作),因为它不支持透明背景。

2 个答案:

答案 0 :(得分: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);
    }

}

答案 1 :(得分:1)

尝试将UseCompatibleTextRendering属性设置为 true