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 를 찾아야 됨.
'VB.NET Programming' 카테고리의 다른 글
[VBNET] BackGround Worker 를 이용 백그라운드 스레드 (0) | 2019.09.17 |
---|---|
[VBNET] 크로스 스레드 (Cross Thread) 예제 (0) | 2019.09.16 |
[VBNET] 델리 게이트 (Delegate) - 델리게이트란? , 선언 방법과 간단한 예제 (0) | 2019.09.13 |
[VBNET] 프로젝트(Project) 내 폼(Form) 목록 리스트(List) 읽기 및 폼(Form) 찾기 (0) | 2019.09.09 |
[VBNET] 시간 체크 함수 (Time Check Func) (0) | 2019.09.02 |