1

我有一个大窗口,需要担心的控件/变量不到 200 个。他们中的许多人都很相似,所以我想知道是否可以将他们的名字串联起来,而不是重复地单独调用每个人。

我举个例子:

我有 5 条我担心的数据:红色、橙色、黄色、绿色、蓝色。

其中每一个都将有一个需要使其可见的标签、一个需要使其可见的文本框以及一个包含文本框中文本的字符串:

lblRed.Visible = True
txtRed.Visible = True
strRed = txtRed.Text

不是为这 5 条数据中的每一条都列出这个,有没有一种方法可以让某种数组循环通过它可以连接这些变量名?

Dim list As New List(Of String)(New String() {"Red", "Orange", "Yellow", "Green", "Blue"})
Dim i As Integer = 0
Do while i < list.count
  lbl + list(i) + .Visible = True
  txt + list(i) + .Visible = True
  str + list(i) = txt + list(i) + .Text
  i = i+1
Loop

我知道上面的代码不起作用,但我想给你我想做的基本概念。这看起来可行吗?

4

3 回答 3

1

http://msdn.microsoft.com/en-us/library/7e4daa9c(v=vs.71).aspx

使用控件集合:

    Dim i As Integer
    i = 1
    Me.Controls("Textbox" & i).Text = "TEST"

所以

Me.controls("lbl" & list(i)).Visible = true

请记住,在连接项目时,'+' 将适用于字符串而不是整数。您可能希望在连接时始终使用 '&'

于 2013-07-10T18:40:39.353 回答
0

在此处查看信息:

http://msdn.microsoft.com/en-us/library/axt1ctd9.aspx

我相信有人可能会发现比这更雄辩的东西,但这应该会达到你想要的结果。您将需要以下导入:

Imports System.Reflection

如果您使用属性来访问您的变量,您可以使用反射按名称获取它们:

'Define these with getters/setters/private vars
Private Property strRed as String
Private Property strOrange as String 
Private Property strYellow as String 
Private Property strGreen as String 
Private Property strBlue as String 

For each color as String in list
    If Me.Controls.Count > 1 Then
         'Should really check for existence here, but it's just an example.
         Me.Controls("lbl" & color).Visible = True
         Dim tbx as TextBox = Me.Controls("txt" & color)
         tbx.Visible = True
         Dim propInfo as PropertyInfo = Me.GetType.GetProperty("str" & color)
         propInfo.SetValue(Me, tbx.Text, Nothing)
     End If
Next
于 2013-07-10T19:30:09.433 回答
0

另一种方法是为每种类型的控件使用一个 select-case 块。像这样的东西:

Private Sub EnableControls()
    For Each c As Control In Me.Controls
        Select Case c.GetType
            Case GetType(TextBox)
                c.Visible = True
                Select Case c.Name.Substring(3)
                    Case "Red"
                        strRed = c.Text
                    Case "Orange"
                        strOrange = c.Text
                    Case "Yellow"
                        'and so on
                End Select
            Case GetType(Label)
                c.Visible = True
        End Select
    Next
End Sub
于 2013-07-10T19:02:58.500 回答