参考编程添加了文本框

时间:2013-12-09 22:13:37

标签: .net vb.net textbox

视觉基础的新手,请耐心等待。在android中完成我的项目,在java中尝试过,不喜欢android中很多东西都缺失的事实,今天决定尝试VB。

所以,我正在以编程方式创建一些文本框和标签,它们可以是3,它们可以是100,具体取决于用户。

我想做的是: 将第一个文本框内的值与第二个文本框中的值相乘,并将其显示在我也以编程方式创建的标签中。这应该很简单,在java中它非常简单但在visual basic中看起来我无法通过名称引用事物/ tag / id我设置了它们。

我想创建一个Sub,当它被调用时会计算所有内容,但我无法弄清楚如何引用文本框。

你能帮帮我吗?

所以,这是我在用户按下按钮时以编程方式添加它们的方法:

Public Sub add()    

 myTxt2.Size = New Drawing.Size(40, 20)
    myTxt2.Name = "cant" & i
    myTxt.Tag = "cant" & i
    myTxt2.Location = New Point(140, 45 + 25 * (rand - 1))
    myTxt2.Text = myTxt2.Name
    myTxt2.Visible = True
    TabPage1.Controls.Add(myTxt2)




    myTxt3.Size = New Drawing.Size(40, 20)
    myTxt3.Name = "pret" & i
    myTxt.Tag = "pret" & i
    myTxt3.Location = New Point(190, 45 + 25 * (rand - 1))
    myTxt3.Text = myTxt3.Name
    myTxt3.Visible = True
    TabPage1.Controls.Add(myTxt3)



    ttotal.Text = "Total: "
    ttotal.ForeColor = Color.Black
    ttotal.Name = "total" & i
    ttotal.Tag = "total" & i
    ttotal.Location = New Point(240, 45 + 25 * (rand - 1))
    ttotal.Size = New Drawing.Size(50, 20)
    ttotal.Visible = True
    ttotal.TextAlign = ContentAlignment.MiddleLeft
    TabPage1.Controls.Add(ttotal)

  Me.Refresh()
    i = i + 1
    rand = rand + 1
End Sub

2 个答案:

答案 0 :(得分:0)

这是一种做你想做的事情的方法。该代码创建了2个文本框和一个标签。文本框中填充了随机数字,标签中包含产品。代码创建一组2个文本框和一个lablel连续,并且可以指定行数。有更有效的方法来添加控件(如其他解决方案所示)但是,我想在此向您展示一种向表单动态添加控件的方法。

Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim max As Integer = 6

        Dim X As Integer = 74
        Dim Y As Integer = 103
        Dim deltaX As Integer = 177
        Dim deltaY As Integer = 50
        Dim tbx1 As New TextBox()

        Dim tbxList As New List(Of TextBox)()
        Dim lblList As New List(Of Label)()

        Dim r As New Random()
        Dim randMax As Integer = 100

        Dim tabIndx As Integer = 0
        'index to control the tabl order of controls.
        Dim j As Integer = -1
        Dim t As Integer = -1
        For row As Integer = 0 To max - 1
            tbxList.Add(New TextBox())
            j = tbxList.Count() - 1

            '
            ' Left TextBox
            ' 
            tbxList(j).Location = New System.Drawing.Point(X, Y)
            tbxList(j).Name = "tbx:" + row.ToString()
            tbxList(j).Size = New System.Drawing.Size(159, 20)
            tbxList(j).TabIndex = tabIndx
            tbxList(j).Text = r.[Next](1, randMax).ToString()
            tabIndx += 1
            Me.Controls.Add(tbxList(j))

            ' 
            ' Right TextBox
            ' 
            tbxList.Add(New TextBox())
            j = tbxList.Count() - 1

            tbxList(j).Location = New System.Drawing.Point(X + deltaX, Y)
            tbxList(j).Name = "tbx:" + row.ToString()
            tbxList(j).Size = New System.Drawing.Size(159, 20)
            tbxList(j).TabIndex = tabIndx
            tbxList(j).Text = r.[Next](1, randMax).ToString()
            tabIndx += 1
            Me.Controls.Add(tbxList(j))

            ' 
            ' label1
            ' 
            lblList.Add(New Label())
            t = lblList.Count() - 1

            lblList(t).AutoSize = True
            lblList(t).Location = New System.Drawing.Point(X + 2 * deltaX, Y)
            lblList(t).Name = "label" + row.ToString()
            lblList(t).Size = New System.Drawing.Size(159, 13)
            lblList(t).Text = row.ToString()
            lblList(t).TabIndex = tabIndx
            lblList(t).Text = "Product: " + (Convert.ToInt32(tbxList(j).Text) * Convert.ToInt32(tbxList(j - 1).Text)).ToString()
            tabIndx += 1
            Me.Controls.Add(lblList(t))

            Y = Y + deltaY
        Next
    End Sub

答案 1 :(得分:0)

  

看来我无法通过我设置的名称/标签/ id引用内容。

这是错误的。你可以通过名字引用它们。 Controls集合接受名称作为索引Me.Controls("TextBox1")。需要注意的是,这会返回一个控件。要将其键入特定类型的控件,可以使用DirectCast方法。

给你更大的问题。如果您要添加一组控件,那么面板就可以正常运行。设计具有所有控件的面板,并在每次需要更多时添加一个新的