2014-01-06 17 views
0

我不在VB.net做一堆工作,但是我想做一些我在其他語言中做的事情,並希望其他人可以提供幫助。通過組件名稱的VB.net安裝程序

我有一個表格,有一堆行文本框。我不希望爲每一行的每個文本框創建setter,而是希望有一個動態setter,它可以根據字符串值設置值。例如。第一行的文本框的名稱類似於tbName1,而第二行的文本框的編號爲tbName2。注意模式,數字在最後改變。

我相信我需要迭代表單上的所有組件,獲取名稱匹配並驗證組件類型是文本框。如果兩者匹配,則設置該值。

解決方案需要與.NET 3.5 framework一起使用。任何幫助表示讚賞。

+0

好吧,也許我不明白的問題正常。你在問如何創建這樣的TexBox對象行,或者你問如何通過名稱訪問它們? –

回答

1

Windows窗體(假設它自從你沒有指定)公開一個名爲Controls的屬性,它可以通過Integer或字符串索引。

你可以這樣像這樣訪問窗體上的文本框:

MyForm.Controls(TxtBoxName) 

希望這有助於

0

創建相關的控制名稱的列表:

Friend _cList as List(of String) 
For n as integer = 0 to 5 
    _cList.Add("tbName" & n.ToString) 
Next n 

然後引用一個:

theForm.Controls(_clist(theIndex)).Text = "New text" 

如果他們實際上是在面板等,然後更改跟蹤方法/存儲List(of Control)(文本框的控制,而不是組件,順便說一句):

Friend _cList as List(of Control) 

如果你會從表格中刪除它們,請務必首先將它們從列表中刪除,否則它們不會正確處置。

0

感謝您的建議傢伙,給了你兩個票的建議,以下是我創建的那樣做的迭代和類型檢查。

Sub SetTextBoxText(TextBoxName As String, Value As String) 
     For Each control As Control In Controls 
      If control.Name = TextBoxName Then 
       If control.GetType.ToString = "System.Windows.Forms.TextBox" Then 
        control.Text = Value 
       End If 
      End If 
     Next 
    End Sub 
+1

幾乎所有的東西都不需要。只需'Controls(TextBoxName).Text = Value'就可以。如果您知道該名稱,則沒有理由進行迭代,因爲控件名稱必須是唯一的。由於控件名稱必須是唯一的,所以在按名稱查找後,確實沒有理由測試類型*。如果你必須找到一個控件,'For Each tb As TextBox In Controls()(Of TextBox)''可以防止測試類型。一個'List(Of T)'也可以節省迭代或找到你所知道的 – Plutonix

1

如果你想改變讓文說tbName3你可以簡單地做:

Me.Controls.Item(String.Format("tbName{0}", 3)).Text = "Test" 

在一個循環:

For i As Integer = 1 To 10 
    Me.Controls.Item(String.Format("tbName{0}", i)).Text = String.Format("I'm textbox #{0}!", i) 
Next 
相關問題