2015-01-20 8 views
4

Целью является панорамирование формы или изображения в форме при щелчке левой кнопкой мыши и перетаскивании мыши. Нижеприведенный код отлично подходит для моих нужд, но есть только одна проблема. Когда я оставил клик и перетащил мышь, форма развертки быстрее, чем мышь, что делает ее неудобной. Есть ли какой-либо метод, который я могу использовать для создания формы pan с той же скоростью как моя мышь? Вот мой код:Pan a Image with Left Click: Скорость прокрутки быстрее, чем мышь (.NET)

Private leftClick as Point 

Private Sub Form_OnMouseDown(sender as Object, e as MouseEventArgs) Handles Form.MouseDown 
    leftClick = e.Position 
End Sub 

Private Sub Form_OnMouseMove(sender as Object, e as MouseEventArgs) Handles Form.MouseMove 
    'Resolves issue where mouse keeps on moving even if not 
    Static MyPoint As New Point 
    If e.Location = MyPoint Then Exit Sub 
    MyPoint = e.Location 

    'If we left click anywhere on form, pan the form 
    If e.Button = Windows.Forms.MouseButtons.Left Then 
     Dim DeltaX As Integer = (leftClick.X - e.x) 
     Dim DeltaY As Integer = (leftClick.Y - e.y) 

     Dim newX as Integer = DeltaX - Me.AutoScrollPosition.X 
     Dim newY as Integer = DeltaY - Me.AutoScrollPosition.Y 

     'Then we set the new autoscroll position. 
     Me.AutoScrollPosition = New Point(newX, newY) 
    End If 
End Sub 

Спасибо!

+0

Вы устанавливаете прокрутку непосредственно на перемещение мыши. Просто уменьшите его, чтобы прокручивать меньше (измените свой калькулятор на Delta) – Plutonix

+0

Правильно, я могу масштабировать его, но как бы масштабировать его так, чтобы он соответствовал скорости движения мыши? – Mike

ответ

4

У вас есть небольшая ошибка в коде:

Private Sub Form_OnMouseMove(sender as Object, e as MouseEventArgs) Handles Form.MouseMove 
    'Resolves issue where mouse keeps on moving even if not 
    Static MyPoint As New Point 
    If e.Location = MyPoint Then Exit Sub 
    MyPoint = e.Location 

    'If we left click anywhere on form, pan the form 
    If e.Button = Windows.Forms.MouseButtons.Left Then 
     Dim DeltaX As Integer = (leftClick.X - e.x) 
     Dim DeltaY As Integer = (leftClick.Y - e.y) 

     Dim newX as Integer = DeltaX - Me.AutoScrollPosition.X 
     Dim newY as Integer = DeltaY - Me.AutoScrollPosition.Y 

     'Then we set the new autoscroll position. 
     Me.AutoScrollPosition = New Point(newX, newY) 

     'Add this code 
     leftClick.X = e.X '<--- 
     leftClick.Y = e.Y '<--- 
    End If 
End Sub 

Вам необходимо разницу между предыдущим положением мыши и текущей. То, что вы сделали, это вычислить сумму из выбранной вами позиции.

+0

Спасибо, что помогли мне отследить мой контроль над кодированием. – Mike

 Смежные вопросы

  • Нет связанных вопросов^_^