다음을 통해 공유


마우스 이벤트를 시뮬레이트하는 방법(Windows Forms .NET)

Windows Forms의 마우스 이벤트 시뮬레이션은 키보드 이벤트 시뮬레이션만큼 간단하지 않습니다. Windows Forms는 마우스를 이동하고 마우스 클릭 동작을 호출하는 도우미 클래스를 제공하지 않습니다. 마우스를 제어하려면 네이티브 Windows 메서드를 사용해야 합니다. 사용자 지정 컨트롤 또는 양식을 사용하는 경우 마우스 이벤트를 시뮬레이트할 수 있지만 마우스를 직접 제어할 수는 없습니다.

이벤트

대부분의 이벤트에는 이벤트를 호출하는 해당 메서드가 있습니다. 메서드 이름은 On 뒤에 EventName이 오는 패턴(예: OnMouseMove)으로 지정됩니다. 해당 메서드는 보호되며 컨트롤 또는 양식 컨텍스트 외부에서 액세스할 수 없기 때문에 이 옵션은 사용자 지정 컨트롤과 양식 내에서만 사용할 수 있습니다. OnMouseMove와 같은 메서드를 사용하는 경우의 단점은 실제로 마우스를 제어하거나 컨트롤을 조작하지 않고 연결된 이벤트만 발생시킨다는 것입니다. 예를 들어 ListBox의 항목 가리키기를 시뮬레이트하려는 경우 OnMouseMoveListBox는 커서 아래의 항목을 강조 표시하여 시각적으로 반응하지 않습니다.

보호된 메서드를 사용하여 마우스 이벤트를 시뮬레이트할 수 있습니다.

  • OnMouseDown
  • OnMouseEnter
  • OnMouseHover
  • OnMouseLeave
  • OnMouseMove
  • OnMouseUp
  • OnMouseWheel
  • OnMouseClick
  • OnMouseDoubleClick

관련 이벤트에 대한 자세한 내용은 마우스 이벤트 사용(Windows Forms .NET)을 참조하세요.

클릭 호출

사용자 코드를 호출하는 단추, 선택된 상태를 변경하는 확인란 등과 같이 대부분의 컨트롤이 클릭 시 작업을 수행한다는 점에서 Windows Forms를 사용하면 간편하게 클릭을 트리거할 수 있습니다. 콤보 상자와 같은 일부 컨트롤은 클릭 시 특별한 작업을 수행하지 않으므로 클릭 시뮬레이션이 컨트롤에 영향을 주지 않습니다.

PerformClick

System.Windows.Forms.IButtonControl 인터페이스는 컨트롤 클릭을 시뮬레이트하는 PerformClick 메서드를 제공합니다. System.Windows.Forms.ButtonSystem.Windows.Forms.LinkLabel 컨트롤 모두, 이 인터페이스를 구현합니다.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

사용자 지정 컨트롤이 있는 양식의 경우 InvokeOnClick 메서드를 사용하여 마우스 클릭을 시뮬레이트합니다. 이 메서드는 양식이나 파생된 사용자 지정 컨트롤 내에서만 호출할 수 있는 보호된 메서드입니다.

예를 들어 다음 코드에서는 button1을 통해 확인란을 클릭합니다.

private void button1_Click(object sender, EventArgs e)
{
    InvokeOnClick(checkBox1, EventArgs.Empty);
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    InvokeOnClick(CheckBox1, EventArgs.Empty)
End Sub

네이티브 Windows 메서드 사용

Windows에서는 마우스 이동 및 클릭을 시뮬레이트하기 위해 호출할 수 있는 메서드(예: User32.dll SendInputUser32.dll SetCursorPos)를 제공합니다. 다음 예제에서는 마우스 커서를 컨트롤 가운데로 이동합니다.

[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int x, int y);

private void button1_Click(object sender, EventArgs e)
{
    Point position = PointToScreen(checkBox1.Location) + new Size(checkBox1.Width / 2, checkBox1.Height / 2);
    SetCursorPos(position.X, position.Y);
}
<Runtime.InteropServices.DllImport("USER32.DLL", EntryPoint:="SetCursorPos")>
Public Shared Function SetCursorPos(x As Integer, y As Integer) As Boolean : End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim position As Point = PointToScreen(CheckBox1.Location) + New Size(CheckBox1.Width / 2, CheckBox1.Height / 2)
    SetCursorPos(position.X, position.Y)
End Sub

참고 항목