2014-02-07 115 views
1

我在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 | 
-------- 

而且我不知道爲什麼......我的目標是能有多個標籤,而不日之間的空間em,像這樣:

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

我錯過了什麼嗎?提前致謝!

爲了澄清,我需要在文字和邊框之間沒有空格。

+1

可能[此答案](http://stackoverflow.com/a/19643524/961113)可以提供一些幫助 – Habib

+0

在這裏查看'FlowLayoutPanel' http://msdn.microsoft.com/en-us/library /system.windows.forms.flowlayoutpanel%28v=vs.110%29.aspx,似乎它有你在找什麼 – Blablablaster

+1

@Habib不喜歡我的答案,所以我刪除它。 OP:試着改變你的'myControl.FlatStyle = FlatStyle.Standard;'不需要Padding或Margins,這是與其他控件的關係。 – LarsTech

回答

2

這就是解決了這個問題對我來說(使用@ 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

我不知道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); 
} 
+0

我不明白它...使用我發佈的代碼(刪除填充和邊距定義)並將FlatStyle從系統切換到標準給了我相同的結果..您可以發佈您正在使用的代碼以查看它是否可用我的結局好嗎? – pteixeira

+0

我正在使用您發佈的確切代碼,在上面添加了一行,在'this.Controls.Add'之前插入。 –

+0

我試圖讓這個答案中的第二個窗口(但與邊框):http://stackoverflow.com/a/3630031/1756496 但我似乎只能得到第一個窗口..它可能操作系統的干擾.. – pteixeira