반응형

VB6 처럼 VBNET 도 컨트롤 배열처럼 사용 하기

VB6 은 컨트롤 배열작성시 인덱스 가 정수형으로 사용 

Label(1) Label(2) Label(3) Label(4) Label(5) Label(6)~

 

for iCount to 6

     Label(iCount).Text =""

Next

 

하지만 아래와 같이 VBNET 은 문자 123456 ~ 로  컨트롤 이름으로

찾아서 사용

 

--선언 방법

아래의 Public 모듈을 전역 클래스나 모듈에 선언 

 

Public Module ControlSelectorExtension
    <System.Runtime.CompilerServices.Extension()> Public Function FindByName(Of T)(ByVal targetClass As Object, ByVal name As String) As T
        Dim info As Reflection.PropertyInfo = targetClass.GetType().GetProperty(name, Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
        Return DirectCast(info.GetValue(targetClass, Nothing), T)
    End Function
    <System.Runtime.CompilerServices.Extension()> Public Function FindByName(Of T)(ByVal name As String, ByVal targetClass As Object) As T
        Dim info As Reflection.PropertyInfo = targetClass.GetType().GetProperty(name, Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
        Return DirectCast(info.GetValue(targetClass, Nothing), T)
    End Function
End Module

 

 

-- 사용 예제 및 방법 

 

Private Sub Control_Init()

        For iCount As Integer = 1 To 10
            FindByName(Of Label)("lbl" + iCount.ToString()).Text = ""
            FindByName(Of Label)("lbl" + iCount.ToString() + "_" + iCount.ToString()).Text = ""
            FindByName(Of Label)("lblWorkingTime" + iCount.ToString()).Text = ""
        Next

End Sub

 

* Panel.Controls 나 Form.Controls 로 찾는 방식이랑은 틀림

ex) Panel1 에 Label 1,2,3,4,5 가 있고 Pannel2 에 Label 6,7,8,9 가 있음

   Panel1.Controls 로 Label12345 를 찾고 Panel2.Controls 로 6789 를 찾아야 됨.

 

반응형

+ Recent posts