我在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|
-----------
我错过了什么吗?提前谢谢!
为了澄清,我需要在文本和边框之间没有空格。
答案 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);
}