VB.NET에서 컨트롤 배열 만들기
2022. 12. 9. 09:00ㆍVB.NET
VB6에서는 기본 디자인창에서 컨트롤 배열을 손쉽게 만들 수 있었는데 이게 VB.NET에서는 안된다. 은근히 편리한 기능이라 컨트롤 배열이 없어지니 처음에는 많이 불편했다.
하지만, VB.NET에서도 컨트롤 배열을 만들어서 사용할 수 있다. 디자인창에서 만드는것보다는 많이 번거롭지만 그래도 꼭 필요한 상황이 생기면 어쩔수 없이 만들어서 써야하기에 이번 강좌에서 한번 만들어보자.
버튼부터 텍스트박스나 레이블을 포함해서 모든 컨트롤을 배열로 만들 수 있지만, 이번 강좌에서는 간단하게 타이머 컨트롤을 컨트롤 배열로 만들어보자. 왜냐하면, 타이머는 눈에 보이는 컨트롤이 아니니 위치나 크기를 잡는등의 잡다한 기능을 모두 배제하고 오로지 컨트롤 배열이라는 기능을 설명하는데 충실할 수 있기 때문이다.
우선 타이머 컨트롤 배열로 사용할 클래스를 하나 만들자.
Public Class ClassTimerArray : Inherits System.Collections.CollectionBase
' 닷넷프레임워크의 System.Collections.CollectionBase 클래스에서 상속됨
Private ReadOnly HostForm As System.Windows.Forms.Form ' 대상폼
Public Sub New(ByVal pForm As System.Windows.Forms.Form, pKind As Integer)
HostForm = pForm
End Sub
Public Sub AddNewTimer()
' 새로운 타이머 컨트롤을 추가한다. (pKind : 0-등록, 1-품단종)
' Timer 클래스의 새 인스턴스를 만든다.
Dim aTimer As New System.Windows.Forms.Timer()
' 컬렉션의 내부 목록에 타이머를 추가한다.
Me.List.Add(aTimer)
' HostForm 필드에서 참조하는 폼의 컨트롤 컬렉션에 타이머를 추가한다.
' HostForm.Controls.Add(aTimer) - 타이머는 폼에 추가할 수 없음 - 버튼등의 컨트롤을 추가할때 필요함
' 타이머 개체의 초기 속성 설정
aTimer.Tag = Me.List.Count - 1
' 타이머 이벤트를 이벤트 처리기와 연결
AddHandler aTimer.Tick, AddressOf RegTimer_Tick
End Sub
Public Sub TimerStart(pIndex As Integer) ' 타이머 켜기
Me.List(pIndex).Interval = 1000
Me.List(pIndex).Enabled = True
End Sub
Public Sub TimerStop(pIndex As Integer) ' 타이머 끄기
Me.List(pIndex).Enabled = False
End Sub
Public Sub RemoveTimer(pIndex As Integer) ' 타이머 한개 제거
HostForm.Controls.Remove(Me(pIndex))
Me.List.RemoveAt(pIndex)
End Sub
Public Sub RemoveAllTimer() ' 모든 타이머 제거
Dim lpCount = Me.List.Count
For i As Integer = 0 To lpCount - 1
'HostForm.Controls.Remove(Me(Me.List.Count - 1)) ' 버튼등의 컨트롤일때 필요함
Me.List.RemoveAt(Me.List.Count - 1)
Next
End Sub
Public Sub RegTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
' 타이머 이벤트 처리기
Dim lpIndex = CType(CType(sender, Timer).Tag, Integer)
Me.List(lpIndex).Enabled = False
Me.List(lpIndex).Interval = 100
Debug.Print(lpIndex & "번 Timer 발생됨")
RE_TIMER:
Me.List(lpIndex).Enabled = True
End Sub
End Class
위 타이머를 메인폼에서 사용해보자.
1. 타이머객체 생성
전역변수로 타이머(MyTimer) 선언후 할당
MyTimer = New ClassTimerArray(Me)
2. 타이머 객체안에 타이머를 원하는 개수만큼 추가
For i As Integer = 0 To 9
MyTimer.AddNewTimer()
Next
이렇게 하면 총 10개의 타이머가 생성된다.
3. 원하는 인덱스의 타이머 켜기
MyTimer.TimerStart(index)
4. 원하는 인덱스의 타이머 끄기
MyTimer.TimerStop(index)
이런식으로 컨트롤 배열을 생성해서 사용이 가능하다.
반응형
'VB.NET' 카테고리의 다른 글
VB.NET에서의 Continue For (0) | 2022.12.15 |
---|---|
VB.NET WPF Timer 사용하기 (0) | 2022.12.10 |
WinHTTP로 패킷을 요리하자. (0) | 2022.12.08 |
VB.NET OrderBy, ThenBy를 이용한 리스트 정렬 (역순정렬 포함) (0) | 2022.12.05 |
VB.NET 이미지를 가로/세로 비율에 맞춰서 원하는 크기로 리사이즈 (0) | 2022.12.05 |