Изменить курсор в качестве обратной связи в DragDrop VB.NET 2010

Работа над приложением DragDrop. У меня есть объект класса (построен как объект), который имеет GroupBox, который включен для DragDrop.

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

Вот подводные лодки, установленные в классе.

Private Sub GroupBoxSourceMouseDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBoxSource.MouseDown
    GroupBoxSource.DoDragDrop(GroupBoxSource.Text, DragDropEffects.Copy)
    lbl1.Text = "DOWN"
End Sub

Private Sub GroupBoxSourceMouseMove(ByVal sender As Object, ByVal e  AsSystem.Windows.Forms.MouseEventArgs) Handles GroupBoxSource.MouseMove
    If bolDragDropMouseDown Then
        ' Initiate dragging.
        'GroupBoxSource.DoDragDrop(GroupBoxSource.Text, DragDropEffects.Copy)
    End If
    bolDragDropMouseDown = False
    lbl1.Text = "MOVE"
End Sub

Private Sub GroupBoxSourceMouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBoxSource.MouseEnter
    Windows.Forms.Cursor.Current = Cursors.Hand
    lbl1.Text = "ENTER"
End Sub

Private Sub GroupBoxSourceMouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBoxSource.MouseLeave
    Windows.Forms.Cursor.Current = Cursors.Arrow
    lbl1.Text = "LEAVE"
End Sub

Private Sub GroupBoxSourceDragDropFeedback(ByVal sender As Object, ByVal e As GiveFeedbackEventArgs) Handles GroupBoxSource.GiveFeedback
    Windows.Forms.Cursor.Current = Cursors.SizeAll
    lbl1.Text = "FEEDBACK"
End Sub

Теперь о необычной сцене. Я решил поменять курсор во время FormLoad основной программы (в которой объект класса определен на форме) на руку, и ничего не изменилось. В отчаянии я установил таймер на 1 мс и закодировал его, чтобы сменить курсор на руку, и, конечно же, курсор теперь является рукой, но моментальность смещается назад к указателю, когда я перемещаю курсор, так что это выглядит так, как будто что-то вызывает курсор вернуться к значению по умолчанию.

2 ответа

Решение

Чтобы легко изменить курсор, нажмите на форму и откройте свойства. Затем перейдите к курсору и измените его на то, что вы хотите.

Вы должны установить e.UseDefaultCursor = False в обработчике событий GiveFeedback, чтобы сделать изменение курсора видимым. Без него перетаскивание всегда использует курсоры по умолчанию.

Курсор, который вы получаете при наведении курсора мыши на элемент управления, устанавливается свойством Control.Cursor. Изменение свойства Cursor.Current не имеет никакого эффекта, свойство заставляет курсор мгновенно возвращаться назад при перемещении мыши.

Другие вопросы по тегам