2017-04-22 97 views
-1

我正在嘗試學習VB.net並遇到了問題。我正在嘗試將標籤動態添加到面板/文本框/組框。我注意到,雖然創建一個動態標籤,我將不得不指定位置屬性。我對此有點感到驚訝 - 爲什麼我必須管理新標籤的創建位置?爲什麼不有一個會自動處理這個問題的佈局管理器?無論如何,我找不到這樣做的方法,但我發現了一個倡導使用文本框動態添加標籤的例子。但是,我只看到一個標籤正在顯示,無論在文本框中。 (當我調試,我注意到,更多的標籤添加到控制對象,但顯示沒有相應的反映)在vb.net中動態添加標籤而不指定位置

這裏是什麼樣子

only one label!

下面是我使用

代碼
Private Sub AddTagCombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles addTagCombo.SelectedIndexChanged 
     Dim selectedTag = addTagCombo.Text 
     If Not IsDuplicateTag(selectedTag) Then 
      Dim label As Label = New Label 
      label.Text = selectedTag 
      label.Name = selectedTag 
      label.AutoSize = True 
      label.Top = 10 
      label.Left = 10 
      tagsBox.Controls.Add(label) 
     End If 
    End Sub 

如何添加動態標籤而不用擔心它們放置在另一個容器內的位置?

+2

您不再使用鼠標從工具箱中刪除表格上的標籤。因此,您不再讓設計人員爲您設置「位置」屬性,而必須自己完成。現在你把所有的東西放在一起,所以你只能看到你添加的最後一個。 FlowLayoutPanel通常會自動安排它們。或者可以顯示多個字符串的其他控件,如ComboBox,DomainUpDown,ListBox,ListView,TreeView,DataGridView。嘗試一切。 –

+0

我對flowlayoutpanel有點困惑。你看到我的代碼有什麼問題嗎?爲什麼它不會顯示多個控件? – Jay

+0

我很難理解你不明白的東西。當你將標籤堆疊在一起時,你預計會發生什麼?你如何閱讀書本底部書本正面的標題? –

回答

2

您的代碼看起來不錯,併成功生成標籤。但它將您的新標籤置於彼此之上,因爲它們的位置是相同的。

所有你需要的大小每個新標籤的位置。例如,爲每個新標籤增加lebel.Top。

這裏建議如何到:

'Add a variable to increment top location 
Dim TopFactor As Integer = 1 

Private Sub AddTagCombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles addTagCombo.SelectedIndexChanged 
    Dim selectedTag = addTagCombo.Text 
    If Not IsDuplicateTag(selectedTag) Then 
     Dim label As Label = New Label 
     label.Text = selectedTag 
     label.Name = selectedTag 
     label.AutoSize = True 
     label.Top = 10 * TopFactor 
     label.Left = 10 
     tagsBox.Controls.Add(label) 

'Increment TopFactor 
    TopFactor +=1 
    End If 
End Sub 

現在,在第一標籤將在位置(10,10),第二個將在位置(20,10)..等。

希望這解決您的問題。

+0

但是我想把它們放在行中,一旦一行被填滿,我希望它們在下一行.. – Jay

+1

@Jay:所以使用[**'FlowLayoutPanel' **](https://msdn.microsoft .com/en-us/library/system.windows.forms.flowlayoutpanel(v = vs.110).aspx),就像已經提示的那樣! - 另外,僅供參考,從上到下(如答案的代碼),但是_ **列**然而從左到右。 –

+0

謝謝,流佈局面板的伎倆。 – Jay