2013-07-10 2 views
1

나는 약 200 개 이하의 컨트롤/변수가있는 큰 창이 있습니다. 그들 중 많은 사람들이 서로 비슷하기 때문에 반복적으로 각자를 개별적으로 부르는 대신 그들의 이름을 연결할 수 있는지 궁금합니다.VB에서 변수 이름 연결하기

내가 예를 만들거야

:

내가 걱정하는 건 데이터의 5 개있다 : 빨강, 오렌지, 노랑, 녹색, 청색을.

에게 가시화 될 필요가있는 라벨이 이들 각각 하나 가시화 될 필요가있는 텍스트 상자 및 텍스트 상자의 텍스트가 포함 된 문자열이를 나열하는 대신

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

을 그 다섯 가지 데이터 모두 하나 하나,이 변수 이름을 연결할 수있는 루프 배열을 만들 수있는 방법이 있습니까?

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 

위 코드가 작동하지 않는다는 것을 알고 있지만, 내가하고 싶은 것에 대한 기본 아이디어를 제공하고 싶습니다. 이것이 가능한가?

답변

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 

가 있다는 사실을 숙지, '+'문자열이 아닌 정수에서 작동합니다. 연결시 항상 '&'을 사용하는 것이 좋습니다.

+0

가 완벽하게 작동 당신은 아래의 수입이 필요합니다! 감사! –

0

또 다른 방법은 각 컨트롤 유형에 대해 선택 상자 블록을 사용하는 것입니다. 이런 식으로 뭔가 : 여기에 정보를 밖으로

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 
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