Visual Basic 6.0 사용자를 위한 이벤트 및 이벤트 처리
업데이트: 2007년 11월
Visual Basic 6.0의 이벤트 및 이벤트 처리에 익숙한 경우에는 Visual Basic 2008의 이벤트 모델이 처음에는 혼란스러워 보일 수 있지만 곧 이러한 모델이 더 간단하고 훨씬 더 강력하다는 것을 알게 될 것입니다.
개념적 차이
Visual Basic 6.0에서는 이벤트가 특정 개체에 연결되고 고유한 이벤트 처리 코드를 가지고 있습니다. 예를 들어, 단추와 메뉴가 있는 폼에서 각 단추와 메뉴에는 고유한 Click 이벤트가 있습니다. 이 때문에 여러 이벤트 처리기에서 동일한 기능을 수행하는 경우에도 개별 이벤트 처리기에 코드를 작성해야 합니다.
' Visual Basic 6.0
Private Sub HelpButton_Click()
HelpButton.Caption = "Help me!"
End Sub
Private Sub HelpMenu_Click()
HelpMenu.Caption = "Help me!"
End Sub
그러나 Visual Basic 2008에서는 이벤트가 대리자를 통해 이벤트 처리기에 연결되므로 여러 개체에 대해 단일 이벤트 처리기를 만들 수 있습니다.
Private Sub HelpButton_Click(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles HelpButton.Click, HelpMenu.Click
sender.Text = "Help me!"
End Sub
위의 예제에서 이벤트 선언에는 처리할 이벤트를 정의하는 Handles 절이 포함되어 있습니다. 이 경우에는 HelpButton 및 HelpMenu 개체 모두에 대한 Click 이벤트입니다. 개체와 이벤트의 형식이 동일할 필요는 없습니다. 예를 들어, 단일 이벤트 처리기에서 단추의 Click 이벤트, 텍스트 상자의 DoubleClick 이벤트 및 타이머의 Tick 이벤트를 처리할 수 있습니다.
또한 위의 예제에서는 이벤트 선언에 두 개의 매개 변수(ByVal sender As Object와 ByVal e As System.EventArgs)가 포함되어 있습니다. 첫 번째 매개 변수인 sender는 이벤트를 발생시키는 개체에 대한 참조를 제공합니다. 두 번째 매개 변수인 e는 처리 중인 이벤트에 대한 개체를 전달합니다. 개체의 속성 또는 경우에 따라 개체의 메서드를 참조하면 마우스 이벤트의 마우스 위치나 끌어서 놓기 이벤트에서 전송 중인 데이터와 같은 정보를 가져올 수 있습니다.
다음 예제에서 MouseDown 이벤트 처리기에서는 sender 매개 변수를 사용하여 이벤트를 생성한 개체의 유형을 결정하고 개체가 PictureBox인 경우에 e 매개 변수를 사용하여 클릭을 수행한 위치로 레이블을 이동합니다. 이 예제를 복제하려면 폼에 두 개의 PictureBox 컨트롤과 하나의 Label 컨트롤을 추가합니다.
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, _
PictureBox1.MouseDown, PictureBox2.MouseDown
If TypeOf sender Is PictureBox Then
Label1.Location = sender.Location + e.Location
Else
MsgBox("Please click a picture")
End If
End Sub
일반적으로 각 이벤트는 두 번째 매개 변수에 대해 다른 이벤트 개체 형식을 가진 이벤트 처리기를 만듭니다. MouseDown 및 MouseUp 이벤트의 이벤트 처리기와 같은 일부 이벤트 처리기에서는 두 번째 매개 변수에 대해 같은 개체 형식인 MouseEventArgs를 사용합니다. 이러한 형식의 이벤트의 경우 동일한 이벤트 처리기를 사용하여 두 개의 이벤트를 모두 처리할 수 있습니다.
다른 이벤트 개체 형식을 전달하는 이벤트의 경우에는 별도의 이벤트 처리기를 만들어야 합니다. 예를 들어, TextBox 컨트롤의 TextChanged 이벤트는 일반 EventArgs 이벤트 개체를 전달하고 MouseDown 이벤트는 보다 특수한 MouseEventArgs 이벤트 개체를 전달합니다. MouseEventArgs 개체에는 어느 마우스 단추를 눌렀는지 확인하는 Button과 같은 마우스 이벤트에 대한 속성이 포함되어 있습니다. 이러한 속성은 TextBox 컨트롤에 적용되지 않으며 이러한 속성을 참조하려고 하면 오류가 발생합니다.
이벤트 처리의 개념적 차이 외에도 Visual Basic 2008에서는 다양한 개체에 대한 일부 이벤트의 이름과 동작이 다릅니다. 자세한 내용은 Visual Basic 6.0 사용자를 위한 Windows Forms 컨트롤을 참조하십시오.