标签不会出现在动态创建的表单vb.net上

时间:2014-08-20 19:56:13

标签: vb.net label

我现在盯着我的代码几个小时,我不明白发生了什么。我根据另一个表单中的文本框值创建了一个包含多个复选框和标签的表单。

这是代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim lb As Label
    Dim cb1 As CheckBox
    Dim cb As CheckBox
    Dim i As Integer
    Dim j As Integer


    For i = 1 To CInt(Aantal.Text) - 1
        indivwoningen.Width = indivwoningen.Size.Width + 21
        indivwoningen.Button1.Location = New Point(indivwoningen.Button1.Location.X + 21, indivwoningen.Button1.Location.Y)

        lb = New Label
        indivwoningen.Controls.Add(lb)
        lb.Text = i + 1
        lb.Font = indivwoningen.Label23.Font
        lb.Location = New Point(indivwoningen.Label23.Location.X + 21 * i, indivwoningen.Label23.Location.Y)

        For j = 1 To 18
            cb1 = New CheckBox
            indivwoningen.Controls.Add(cb1)
            cb = indivwoningen.Controls.Find("CheckBox" & j & "00", False)(0)
            cb1.Location = New Point(cb.Location.X + 21 * i, cb.Location.Y)
            cb1.Width = cb.Width
            cb1.Text = cb.Text
            If i < 10 Then
                cb1.Name = "CheckBox" & j & "0" & i
            Else
                cb1.Name = "CheckBox" & j & i
            End If
        Next
    Next
    indivwoningen.Show()

End Sub

创建的表单有两个缺陷:

  • 只显示第一个创建的标签
  • 复选框未正确对齐。

我不明白发生了什么。有人能帮助我吗?

编辑:这是我创建额外控件之前和之后的图片

http://s21.postimg.org/552yty213/Knipsel.png enter image description here

1 个答案:

答案 0 :(得分:2)

为标签设置Autosize属性为True,并将复选框的Height设置为与引用复选框相同的高度

For i = 1 To CInt(Aantal.Text) - 1
    ....
    lb = New Label
    indivwoningen.Controls.Add(lb)
    lb.Text = i + 1
    lb.Font = indivwoningen.Label23.Font
    lb.Autosize = True
    lb.Location = New Point(indivwoningen.Label23.Location.X + 21 * i, indivwoningen.Label23.Location.Y)

    For j = 1 To 18
        cb1 = New CheckBox
        indivwoningen.Controls.Add(cb1)
        cb = indivwoningen.Controls.Find("CheckBox" & j & "00", False)(0)
        cb1.Location = New Point(cb.Location.X + 21 * i, cb.Location.Y)
        cb1.Width = cb.Width
        cb1.Height = cb.Height
        cb1.Text = cb.Text
        If i < 10 Then
            cb1.Name = "CheckBox" & j & "0" & i
        Else
            cb1.Name = "CheckBox" & j & i
        End If
    Next
Next

好吧,对于复选框,解释似乎很容易。默认情况下,新复选框的高度为24像素,而在窗体上绘制的高度为较小的高度。因此,因为检查方块位于复选框高度的中心,所以它似乎与引用复选框不对齐。

对于标签,问题属于同一类型。如果不设置Autosize,则会创建标签,默认大小为100x23像素。这意味着标签上带有文字&#34; 2&#34;扩展其大小以覆盖标签的位置,包括文本&#34; 3&#34;,&#34; 4&#34;,&#34; 5&#34;,&#34; 6&#34;,而带有文字的标签&#34; 3&#34;用文字&#34; 7&#34;覆盖标签。等等。

在任何情况下,设置AutoSize似乎都是默认行为,同样也在Form.Designer.vb文件中,按照您的设计时间说明创建控件。

您也可以尝试将动态创建的标签的大小设置为与参考标签相同的大小,效果是相同的。

相关问题