Sizing Box Пользовательский контроль - PullRequest
0 голосов
/ 18 марта 2012

Я пишу элемент управления в vb.net, который позволит пользователю изменить размер чего-либо.Пока что изменение размера работает, но я не могу заставить работать должным образом, вместо того, чтобы перемещаться туда, куда движется мышь, кажется, что он мерцает между двумя позициями, но я не могу понять, откуда эти позиции берутся.Это следует за мышью вроде .Я знаю, что объяснение не очень хорошее, поэтому вот код, который вы можете увидеть сами: pastebin .

Извиняюсь за это плохое качество (пожалуйста, укажите на плохие вещи, чтобы я мог исправить), но это действительно дает мне кошмар, и я не мог придумать чистый способ написатьthis.

Если у кого-нибудь есть ответы на вопрос, почему он не переместится в правильное положение, я был бы очень признателен!

Редактировать: Очистить код немного перемещение происходит там, где выбранный маркер "m".Что это за часть:

If SelectedHandle.Contains("m") Then
    If e.Button = MouseButtons.None Then
        SelectedHandle = ""
    Else
        Me.Location = e.Location
    End If
End If

Изменение его на это работает, но оно переходит на середину элемента управления, в то время как я бы хотел, чтобы он двигался относительно места, где пользователь щелкнул мышью на элементе управления

If SelectedHandle.Contains("m") Then
    If e.Button = MouseButtons.None Then
        SelectedHandle = ""
    Else
        Dim newloc = Me.Location
        newloc.Offset(e.X, e.Y)
        newloc.Offset(-0.5 * Width, -0.5 * Height)
        Me.Location = newloc
    End If
End If

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Похоже, y_difference и x_difference рассчитываются с использованием координат X и Y , которые могут быть относительно контекста, в котором перемещается(или щелчок) происходит.Проверьте статью здесь .

Например, когда обрабатывается событие Control.MouseMove, значения координат мыши относятся к координатам элемента управления, вызвавшего событие

Всегда с использованием e.Location должны давать правильные номера.

0 голосов
/ 19 марта 2012

Проблема была в том, что мне нужно было сохранять смещение мыши при наведении мыши, а не при ее перемещении. Глупая ошибка! Новый код здесь . Теперь он работает, как и ожидалось, хотя код все еще очень временный.

...