2016-06-07 39 views
0

我需要設置一些控件的文本。VB.Net通過名稱使用變量循環控制

我有一個Form與一些CheckBoxes和一些TextBoxes

VBA(如果我有5個文本框命名爲「TextBox1的」,「TextBox2中」 ......「TextBox5」),我可以使用這樣的事情:

For n = 1 To 5 
    Me("TextBox" & n).Text = NeededValue 
Next n 

我知道,這樣的事情也是可能在VB.Net,但我無法找到正確的語法(我沒有在SO上找到類似的代碼)。

我使用

Me.Controls() 

tryed但我不能插入控件名稱這樣

+0

如果什麼人決定使用更好(更有意義)的控制名稱?這會讓你的代碼無聲無息。不要讓你的邏輯依賴控制名稱。 –

+0

@TimSchmelter我使用了「有意義的」控件名稱,但我需要顯示並獲得其中的一些價值(我沒有更好的想法)暗示 – genespos

+1

您可以將它們分組在一個像Panel或GroupBox的容器控件中。然後它很簡單:'Dim myTextboxes = textBoxPanel.Controls.OfType(Of TextBox).ToArray()' –

回答

0

使用For Each,然後用TypeOf測試,以找出所有TextBoxesform這樣的:

For Each myObject1 As [Object] In Me.Controls 
    If TypeOf myObject1 Is TextBox Then 
     TryCast(myObject1, TextBox).Text = "NeededValue" 
    End If 
Next 

另外:

Dim myText = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5} 
     For Each btn In myText 
      btn.Text = "NeededValue" 
     Next 

For i As Int32 = 1 To 5 
    Dim Txt = Me.Controls.Find("TextBox" & i, True) 
    If Txt.Length > 0 Then 
     Txt(0).Text = "blah" 
    End If 
Next 

或者:

For i As Int32 = 1 To 5 
     Dim Txt = Me.Controls.Find("TextBox" & i, True) 
     If Txt.Length > 0 Then 
      Txt(0).Text = "NeededValue" 
     End If 
    Next 
3
Me.Controls.Find("TextBox" & n, True) 

將是類似的方法,以您的VBA風格。

+0

我嘗試設置「文本」時出現錯誤。不能將Control()轉換爲ComboBox(我使用了'CType(.Find(「CBox_Phase」&r,True),ComboBox)' – genespos

+0

returnvalue是一個控件數組,你必須先把我會推薦你​​考慮一下你的處理控件的方式,我認爲這不是一種通過名字來遍歷控件的好方法,因爲我可以看到你來自VBA,我只能建議你重新學習VB.NET從頭開始,忘記VBA的東西 另一種方法是將所有控件都存儲在表單(文本框)中的文本中,這樣你就可以使用for每個和列表。 – Mono