2013-12-09 29 views
0

新的visual basic,請耐心等待。在android中完成我的項目,在java中嘗試它,不喜歡android的許多事情都缺少並決定今天嘗試VB的事實。以編程方式添加文本框的參考

所以,我以編程方式創建了一些文本框和標籤,它們可以是3,它們可以是100,具體取決於用戶。

我想要做的是這樣的: 將第一個文本框中的值與第二個文本框中的值相乘並將其顯示在我也以編程方式創建的標籤中。這應該很容易,在java中它非常簡單,但在視覺基本它看起來我不能通過我設置給他們的名稱/標籤/ 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

我看不到您在哪裏創建這些控件。他們看起來像已經存在,你只是改變名稱和位置。 – LarsTech

+0

TabPage1.Controls.Add(myTxt2)TabPage1.Controls.Add(myTxt3)TabPage1.Controls.Add(ttotal) –

+1

不,這些是現有的控件。我沒有在任何地方看到'new'這個詞,例如'Dim newBox As New TextBox'等。 – LarsTech

回答

0

這裏是做你想要的東西的一種方式。該代碼創建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 
0

看來我不能由名稱/標籤/ ID我設置爲他們參考的東西。

這是錯誤的。你可以通過名字引用它們。 Controls集合接受名稱作爲索引,Me.Controls("TextBox1")。對此的警告是,這返回一個控件。要將其鍵入到特定類型的控件中,可以使用DirectCast方法。

給你更大的問題。如果你將要添加一組控件,一個面板可以很好地工作。使用所有控件設計面板並在每次需要更多時添加一個新面板

相關問題