【问题标题】:Reference programmatically added textboxes参考以编程方式添加的文本框
【发布时间】:2013-12-10 10:19:21
【问题描述】:

Visual Basic 新手,请多多包涵。在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

【问题讨论】:

  • 我看不到您在哪里创建这些控件。它们看起来已经存在,而您只是更改名称和位置。
  • TabPage1.Controls.Add(myTxt2) TabPage1.Controls.Add(myTxt3) TabPage1.Controls.Add(ttotal)
  • 不,这些是现有控件。我在任何地方都没有看到 new 这个词,如 Dim newBox As New TextBox 等。

标签: .net vb.net textbox


【解决方案1】:

看来我无法通过我设置的名称/标签/ID 来引用它们。

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

对于您更大的问题。如果您要添加一组控件,则面板会很好用。设计包含所有控件的面板,并在每次需要更多控件时添加一个新控件

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 2018-03-17
      • 2012-02-20
      • 2022-01-04
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多