没有填充和边距的标签

时间:2014-02-07 16:15:59

标签: c# winforms .net-3.5 labels

我在C#(.NET Framework 3.5)中有以下代码

public partial class MainForm : Form
{
    public MainForm()
    {
        //
        // The InitializeComponent() call is required for Windows Forms designer support.
        //
        Label myControl = new Label();
        myControl.Text = "TEXT";
        myControl.FlatStyle = FlatStyle.System;
        myControl.AutoSize = true;
        myControl.BorderStyle = BorderStyle.FixedSingle;
        myControl.Padding = new Padding(0);
        myControl.Margin = new Padding(0);
        this.Controls.Add(myControl);
        InitializeComponent();


    }
}

哪个应显示带有边框的文字标签,如下所示:

------
|TEXT|
------

相反,我明白了:

--------
|TEXT  |
--------

我不知道为什么......我的目标是能够拥有多个标签,它们之间没有空格,如下所示:

-----------
|TEXT|TEXT|
-----------

我错过了什么吗?提前谢谢!

为了澄清,我需要在文本和边框之间没有空格。

2 个答案:

答案 0 :(得分:4)

这就是为我解决的问题(使用@ LarsTech的解决方案):

我添加了

    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
        this.AutoSize = false;
    }

    protected override void OnFontChanged(EventArgs e) {
        base.OnFontChanged(e);
        this.Size = GetTextSize();
    }

    protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        this.Size = GetTextSize();
    }

    protected override void OnTextChanged(EventArgs e) {
        base.OnTextChanged(e);
        this.Size = GetTextSize();
    }

    private Size GetTextSize() {
        Size padSize = TextRenderer.MeasureText(".", this.Font);
        Size textSize = TextRenderer.MeasureText(this.Text + ".", this.Font);
        return new Size(textSize.Width - padSize.Width, textSize.Height);
    }

到我的标签定义。

我还添加了

textLabel.FlatStyle = FlatStyle.System;

非常感谢您的帮助!

答案 1 :(得分:2)

我不知道FlatStyle属性发生了什么,只是说FlatStyle.System对我的系统有类似的影响。其他FlatStyle值清楚地表明了对控件的影响,但FlatStyle.System非常模糊。

  

控件的外观由用户的操作系统决定。

我不确定操作系统中的控件在布局中起什么作用。 LarsTech关于将其更改为FlatStyle.Standard(或任何其他值)的评论为我解决了问题(并且不会删除任何文本,因为您的评论表明正在发生在您身上)

您可以通过将其显式设置为中心来覆盖对齐行为:

myControl.TextAlign = ContentAlignment.MiddleCenter;

我不确定你想要实现的目标(因为看起来你可以在一个 Label输入所有文字,不是多个下一个彼此),但您可能还想删除边框样式:

myControl.BorderStyle = BorderStyle.None;

并且,与Blablablaster所说的相似,请考虑使用FlowLayoutPanel并添加Label控件。您可以将上面的代码放在一个循环中,将每个代码添加到面板中,然后它会为您将它们彼此相邻放置。

for (var i = 0; i < 10; i++)
{
    Label myControl = new Label();
    myControl.Text = "TEXT";
    ...
    ...
    flowLayoutPanel1.Controls.Add(myControl);
}