타이틀바가 없는 폼을 마우스로 이동시키는 방법입니다.
여기에서는 Win32 API를 사용하지 않는 방법을 소개합니다.
[ 마우스 이벤트를 이용하는 방법 ]
우선은, 가장 기본적인 방식입니다.
다음의 코드에서는, 단순하게 폼(Form1) 상에서 마우스의 왼쪽 버튼이 눌려져서 이동시킨 것을 감지하는 것으로써 처리하고 있습니다.
'마우스의 클릭위치를 기억한다.
Private mousePoint As Point
'마우스의 버튼이 눌러졌을때
Private Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown
If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
'위치를 기억한다.
mousePoint = New Point(e.X, e.Y)
End If
End Sub
'마우스가 이동했을때
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove
If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
Me.Left += e.X - mousePoint.X
Me.Top += e.Y - mousePoint.Y
'혹은, 아래와같이 처리한다.
'Me.Location = New Point( _
' Me.Location.X + e.X - mousePoint.X, _
' Me.Location.Y + e.Y - mousePoint.Y)
End If
End Sub
위의 예에서는 폼에 있는 컨트롤에서 마우스의 버튼을 눌러 드래그 해도, 윈도우는 이동하지 않습니다. 컨트롤상의 드래그로도 이동할 수 있도록 하려면, 그 컨트롤의 MouseDown 및 MouseMove 이벤트 핸들러에 Form1_MouseDown 및 Form1_MouseMove를 추가하면 됩니다.
예를 들면 Form1에 PictureBox1 오브젝트가 있어, PictureBox1상에서 mouse button을 눌러 드래그를해도 Form1을 이동할 수 있도록 하려면 다음과 같이 하면 됩니다.
Private mousePoint As PointPrivate Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown, PictureBox1.MouseDown
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove, PictureBox1.MouseMove
End Sub
'VB.NET' 카테고리의 다른 글
[TIPS] STAThread란 무엇인가? (0) | 2012.10.22 |
---|---|
[TIPS] 폼을 항상 앞에다가 표시하는 방법 (0) | 2012.10.22 |
[TIPS] 컨트롤을 실행시에 작성하는 방법, 퍼포먼스 향상 (0) | 2012.10.22 |
[TIPS] DataGrid의 지정된 좌표 위치의 정보를 취득하는 방법 (0) | 2012.10.22 |
[TIPS] DataGrid의 셀에 이미지를 표시하는 방법 (0) | 2012.10.22 |