Изменить курсор в качестве обратной связи в DragDrop VB.NET 2010 - PullRequest
0 голосов
/ 06 марта 2011

Работа над приложением 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 ]

3 голосов
/ 06 марта 2011

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

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

0 голосов
/ 06 марта 2011

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

...