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