ПОНЯТНО О Visual Basic NET (том 3)

Придаем экзотической форме подвижность


Поскольку заголовка формы не видно, поставим задачу таскать форму по экрану, ухватившись мышью за любую точку ее поверхности. Для этого используем события формы 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_нажатия_мыши  снова накапливается небольшая разница, снова форма сдвигается и снова благодаря сдвигу формы разница становится нулевой. И так далее.

Все вышесказанное относится и к вертикальной координате.



Содержание раздела