2017-09-14 80 views
-3

這不起作用:如何製作N標籤?

static int N = word.Length; 
int z = 0; 
for (int k = 0; k <N; k++) 
{ 
    Label l = new Label(); 
    l.Name = string.Format("charLabel{0}", k); 
    l.Text = "_"; 
    l.Height = 75; 
    l.Width = 25; 
    l.Location = new Point(300 + z, 10); 
    this.Controls.Add(l); 
    z += 10; 
} 

只創建一個,我想創造更多Label S,旁邊的最後一次。我怎樣才能做到這一點?

+3

你肯定有隻有一個標籤,不爲N,但在相同的位置? – demo

+0

循環是否像預期的那樣運行多次? – Amy

+3

你在做什麼:Winforms,WPF,ASP ..? __Always__正確標記您的問題! – TaW

回答

1

如果您在行z += 10;中設置的數字大於10,您將看到結果,因爲它需要更多空間來顯示您的內容。但是,如果你設置AutoSize屬性像下面你會得到你想要的結果也是:

l.AutoSize = true; 

通過設置這個屬性控制會自動調整大小以顯示其全部內容。

此外值得一提的是,當使用設計器添加到表單時,此屬性默認爲true,但在從代碼實例化時不會。基於MSDN

使用設計器添加到表單時,默認值爲true。從代碼實例化時,默認值爲false。

+3

Good catch:*「使用設計器添加到表單時,默認值爲true。從代碼實例化時,默認值爲false」* from [msdn](https://msdn.microsoft.com/en-我們/庫/ system.windows.forms.label.autosize(v = vs.110)的.aspx)。 – Sinatr

0

由於您只將一個字符分配給標籤的文本屬性,並且不會更改標籤的垂直邊距,因此標籤會疊加。

你應該改變這樣的代碼:

static int N = word.Length; 
int z = 0; 
for (int k = 0; k <N; k++) 
{ 
    Label l = new Label(); 
    l.Name = string.Format("charLabel{0}", k); 
    l.Text = "_"; 
    l.Height = 75; 
    l.Width = 25; 
    l.Location = new Point(300, 10 + z); 
    this.Controls.Add(l); 
    z += 50; 
}