Придаем экзотической форме подвижность
Поскольку заголовка формы не видно, поставим задачу таскать форму по экрану, ухватившись мышью за любую точку ее поверхности. Для этого используем события формы MouseDown и MouseMove (14.2). Дополним код нашей формы из предыдущего подраздела следующим текстом:
'Координаты мыши при нажатии над формой на левую кнопку мыши:
Private X_нажатия_мыши As Integer
Private Y_нажатия_мыши As Integer
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _
Handles MyBase.MouseDown
If e.Button = MouseButtons.Left Then
X_нажатия_мыши = e.X
Y_нажатия_мыши = e.Y
End If
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) _
Handles MyBase.MouseMove
If e.Button = MouseButtons.Left Then
Me.Left = Me.Left + (e.X - X_нажатия_мыши)
Me.Top = Me.Top + (e.Y - Y_нажатия_мыши)
End If
End Sub
Пояснения: Чтобы перетащить форму по экрану, мы над формой нажимаем левую кнопку мыши (однократно срабатывает событие MouseDown) и, не отпуская кнопку, тащим мышь по экрану (многократно срабатывает событие MouseMove). Форма, как привязанная, следует за мышью. Разберем этот процесс подробнее.
В момент нажатия левой кнопки мыши фиксируются координаты нажатия мыши. Не забывайте, что e.X и e.Y – координаты мыши относительно левого верхнего угла формы, а не экрана. Тут же мы начинаем мышь перемещать. Через доли секунды впервые срабатывает событие MouseMove. К этому моменту между значениями e.X и X_нажатия_мыши накапливается небольшая разница (несколько пикселей). В результате горизонтальная координата формы Me.Left благодаря оператору
Me.Left = Me.Left + (e.X - X_нажатия_мыши)
изменяется на столько же пикселей. Форма сдвигается вслед за мышью на это число пикселей и поэтому разница становится нулевой. Форма догнала мышь. Но мы продолжаем тащить мышь. Еще через доли секунды событие MouseMove срабатывает во второй раз. К этому моменту между значениями e.X и X_нажатия_мыши снова накапливается небольшая разница, снова форма сдвигается и снова благодаря сдвигу формы разница становится нулевой. И так далее.
Все вышесказанное относится и к вертикальной координате.