动态添加标签而不在vb.net中指定位置

时间:2017-04-22 13:20:00

标签: vb.net forms

我正在尝试学习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

如何添加动态标签而不必担心它们放置在另一个容器内的位置?

1 个答案:

答案 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)......依此类推。

希望这能解决你的问题。