视觉基础的新手,请耐心等待。在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
答案 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方法。
给你更大的问题。如果您要添加一组控件,那么面板就可以正常运行。设计具有所有控件的面板,并在每次需要更多时添加一个新的