Vb.net 如何创建多个标签

Vb.net 如何创建多个标签,vb.net,Vb.net,我不熟悉“编码/编程”。我正在尝试制作一个功能性的程序——我称之为“支付点”。这就像那些超市程序,他们登记你要买的东西所以我需要创建一些标签来注册产品。 我的守则如下: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ''When i click the button If CantidadVer1.Text = 0 Then ''this verifies how ma

我不熟悉“编码/编程”。我正在尝试制作一个功能性的程序——我称之为“支付点”。这就像那些超市程序,他们登记你要买的东西所以我需要创建一些标签来注册产品。

我的守则如下:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ''When i click the button

    If CantidadVer1.Text = 0 Then ''this verifies how many Labels i have created

        CantidadVer1.Text = +1 ''this updates the verification

        Dim lbl1 As New Label ''this creates the labels
        lbl1.Size = New System.Drawing.Size(159, 23)
        lbl1.Text = (Product.Text) ''product.text is a TextBox
        lbl1.Location = New System.Drawing.Point(12, 80 + 20) '' i add 20 more everytime i create a label
        Me.Controls.Add(lbl1)

    ElseIf CantidadVer1.Text = 2 Then ''at this point it creates the label but "crashes" (It dosent work anymore)

        CantidadVer1.Text = +1

        Dim lbl2 As New Label
        lbl2.Size = New System.Drawing.Size(159, 23)
        lbl2.Text = (Product.Text)
        lbl2.Location = New System.Drawing.Point(12, 80 + 40)
        Me.Controls.Add(lbl2)

    ElseIf CantidadVer1.Text = 2 Then

        CantidadVer1.Text = +1

        Dim lbl3 As New Label
        lbl3.Size = New System.Drawing.Size(159, 23)
        lbl3.Text = (Product.Text)
        lbl3.Location = New System.Drawing.Point(12, 80 + 60)
        Me.Controls.Add(lbl3)

    ElseIf CantidadVer1.Text = 3 Then

        CantidadVer1.Text = +1

        Dim lbl4 As New Label
        lbl4.Size = New System.Drawing.Size(159, 23)
        lbl4.Text = (Product.Text)
        lbl4.Location = New System.Drawing.Point(12, 80 + 80)
        Me.Controls.Add(lbl4)
    ElseIf CantidadVer1.Text = 4 Then

        CantidadVer1.Text = +1

        Dim lbl4 As New Label
        lbl4.Size = New System.Drawing.Size(159, 23)
        lbl4.Text = (Product.Text)
        lbl4.Location = New System.Drawing.Point(12, 80 + 100)
        Me.Controls.Add(lbl4)

    End If


End Sub
所以我执行它,然后它创建两个标签,然后崩溃

它应该创建5个标签


有没有更简单的方法来创建多个标签而不使程序崩溃?

在您的代码中,我每次只看到创建一个标签。我认为代码不会崩溃。请记住,在IF块中,如果第一部分中满足了条件,它将跳过所有后续的ElseIf条件

通过一些研究,您会发现最好的选择是使用
DataGridView
而不是一堆标签。您可以简单地为每个项目添加一个新行。假设您有一个名为DGV_Product的datagridview,其中有3个文本框列,分别表示产品、数量和价格:

Dim price as Double = 1.99
Dim product as String = "Apple"
Dim qty as integer = 3

DGV_Product.Rows.Add(New String() {product, Cstr(qty), CStr(price)})
这将添加一行,其中包含“Apple,3,1.99”

但如果您坚持使用标签,这会更好:

1) 在类级别设置以下变量

Dim lbl_pos as integer
2) 在表单加载事件处理程序中,将值设置为比第一个标签的显示位置小20:

lbl_pos = 80 ' gathered from your code 
3) 然后在按钮的click事件处理程序中,在添加新标签之前,将新标签的位置增加20

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

lbl_pos = lbl_pos + 20  'increment the position

    Dim lbl as New Label
    With lbl
       .Text = "Your Text"
       .Location = New Point(10,lbl_pos) '(left position, top position)
       ' And so Forth
    End With
    me.controls.add(lbl)

End Sub
使用这种方法,您可以添加任意多的标签,而不需要一堆If-ElseIf块


我希望您重新考虑您的方法,转而使用
DataGridView
,因为它更实用,您可以随意添加行。

在您的代码中,我每次只看到创建一个标签。我认为代码不会崩溃。请记住,在IF块中,如果第一部分中满足了条件,它将跳过所有后续的ElseIf条件

通过一些研究,您会发现最好的选择是使用
DataGridView
而不是一堆标签。您可以简单地为每个项目添加一个新行。假设您有一个名为DGV_Product的datagridview,其中有3个文本框列,分别表示产品、数量和价格:

Dim price as Double = 1.99
Dim product as String = "Apple"
Dim qty as integer = 3

DGV_Product.Rows.Add(New String() {product, Cstr(qty), CStr(price)})
这将添加一行,其中包含“Apple,3,1.99”

但如果您坚持使用标签,这会更好:

1) 在类级别设置以下变量

Dim lbl_pos as integer
2) 在表单加载事件处理程序中,将值设置为比第一个标签的显示位置小20:

lbl_pos = 80 ' gathered from your code 
3) 然后在按钮的click事件处理程序中,在添加新标签之前,将新标签的位置增加20

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

lbl_pos = lbl_pos + 20  'increment the position

    Dim lbl as New Label
    With lbl
       .Text = "Your Text"
       .Location = New Point(10,lbl_pos) '(left position, top position)
       ' And so Forth
    End With
    me.controls.add(lbl)

End Sub
使用这种方法,您可以添加任意多的标签,而不需要一堆If-ElseIf块


我希望您重新考虑您的方法,改用
DataGridView
,因为它更实用,您可以随意添加任意多的行,而无需麻烦。

您的代码中有错误。。线路

ElseIf CantidadVer1.Text = 2 Then ''at this point it creates the label but "crashes" (It dosent work anymore
应该是

ElseIf CantidadVer1.Text = 1 Then ''at this point it creates the label but "crashes" (It dosent work anymore)

您的代码中有一个错误。。线路

ElseIf CantidadVer1.Text = 2 Then ''at this point it creates the label but "crashes" (It dosent work anymore
应该是

ElseIf CantidadVer1.Text = 1 Then ''at this point it creates the label but "crashes" (It dosent work anymore)

如果不在开头设置CantidadVer1的值。其值“”不是0。因此,如果您不将0放入CantidadVer1.text,则将是错误

第一个可能是这样的
如果CantidadVer1.Text=”“或CantidadVer1.Text=0,则如果未在开始处设置CantidadVer1的值,则

。其值“”不是0。因此,如果您不将0放入CantidadVer1.text,则将是错误

第一个可能是这样的
如果CantidadVer1.Text=”“或CantidadVer1.Text=0,则您的PTP设计不完善。这里的所有答案都是试图根据你所做的事情来解决你的问题

但是你的模型是基于你的观点。例如,您是否计划如何检索所有添加的产品?历史就在你的视野之内:祝你好运

这就是为什么我建议查看您的设计。例如:

  • 使用代码隐藏中的列表保存数据。您的按钮单击应该只执行此操作(通过一些验证)
  • 在视图中使用中继器。把那个中继器绑定到你的列表上:瞧。您的中继器将负责创建与所有添加产品对应的所有标签

您的PTP设计不完善。这里的所有答案都是试图根据你所做的事情来解决你的问题

但是你的模型是基于你的观点。例如,您是否计划如何检索所有添加的产品?历史就在你的视野之内:祝你好运

这就是为什么我建议查看您的设计。例如:

  • 使用代码隐藏中的列表保存数据。您的按钮单击应该只执行此操作(通过一些验证)
  • 在视图中使用中继器。把那个中继器绑定到你的列表上:瞧。您的中继器将负责创建与所有添加产品对应的所有标签

当程序崩溃时,您得到的确切异常是什么?您的第一个
ElseIf
应该是
ElseIf CantidadVer1。Text=1然后
您是否也希望
CantidadVer1.Text=+1
会增加文本字段?当程序崩溃时您得到的确切异常是什么?您的第一个
ElseIf
应该是
ElseIf CantidadVer1.Text=1那么您是否也希望
CantidadVer1.Text=+1
会增加文本字段?