2013-02-26 51 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