2013-02-26 42 views
0

可以說我有3個名爲LBL_1,LBL_2和LBL_3的標籤。合併字符串以查找變量名稱

然後,我有一個功能,使得1,2隨機選擇3

我如何可以結合該值與標籤的名字嗎?

像這樣

Dim NR As Integer = MyOneToThreeRandomizer() 
'Now NR is 1,2 or 3 

LBL_ & NR.ToString(or something) & .Text = "Hello world!" 

當然,我可以做這樣的事情;

Dim NR As Integer = MyOneToThreeRandomizer() 
If NR = 1 Then 
    LBL_1.Text = "Hello World!" 
Else If NR = 2 Then 
    LBL_2.Text..... 
....And so on 

但在這種情況下,它可能高達80個號碼所以這種感覺真不好。

+0

我敢肯定,這已被問過,有幾個類似的問題,但我不能找到真正的重複。 – 2013-02-27 14:29:07

回答

2

您可以將標籤添加到面板並通過孩子訪問它們。然後你可以通過索引訪問它們。

3

將您的標籤放入數組中,然後通過索引訪問它們。

Dim myLabelArray As String() = {"label1", "label2", "label3"} 

Dim sb As New StringBuilder() 

'Some flavour of loop 

    Dim NR As Integer = MyOneToThreeRandomizer() 

    sb.Append(myLabelArray(NR-1)) 

'End loop 

如果你有System.Windows.Forms.Label小號,你可以將它們添加到階段編程,在一個循環中,而你也把他們在您的labelArray

+0

這將是每個標籤單獨添加到陣列,基本相同。 – JMan 2013-02-26 13:39:56

+0

Nope:Dim myLabelArray As String()= {「label1」,「label2」,「label3」}' – Teejay 2013-02-26 13:44:25

+0

如果您必須爲80個標籤執行此操作。 – JMan 2013-02-26 13:46:24

0
For Each ctr As Control In Container.Controls 
    If ctr.Name = "LBL_" & NR.ToString Then 
     CType(ctr, Label).Text = "Hello World" 
    End If 
Next 
2
Dim NR As Integer = MyOneToThreeRandomizer() 
Dim lbls() As Label = DirectCast(Me.Controls.Find("LBL_" & NR, True), Label()) 

If lbls.Length > 0 Then 
    lbls(0).Text = "Hello world!" 
End If 
+0

這看起來很有趣!即使面板解決方案工作,也必須進行測試。謝謝。 – gubbfett 2013-02-26 14:03:32

+0

如果您的所有lbl控件都直接添加到表單中,我會在查找方法中將True更改爲False以提高性能。這也應該適用於其他控制。如果您的標籤在面板上,請嘗試MyPanel.Controls.Find(...) – Ceres 2013-02-26 14:13:50