VB6 标签中的快速鼠标移动

Fast MouseMove in label in VB6

lblRoom是标签控制数组,brdrRoom是形状控制数组,双击每个标签,我们可以用鼠标拖动它。当一个标签在其他标签上缓慢移动时没有问题,它移动平滑,但是当鼠标快速移动并且到达其他标签的中心时它会移动并且所选标签会静止。 MouseMove 的代码段为:

Private Sub lblRoom_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    SelectedItemIndex = Index
    XPos = lblRoom(SelectedItemIndex).Left + X
    YPos = lblRoom(SelectedItemIndex).Top + Y
    If DragItem = True Then
       lblRoom(SelectedItemIndex).Left = XPos - lblRoom(SelectedItemIndex).Width / 2
       lblRoom(SelectedItemIndex).Top = YPos - lblRoom(SelectedItemIndex).Height / 2
       brdrRoom(SelectedItemIndex).Left = XPos - brdrRoom(SelectedItemIndex).Width / 2
       brdrRoom(SelectedItemIndex).Top = YPos - brdrRoom(SelectedItemIndex).Height / 2
    End If
End Sub

有什么问题吗?帮帮我 :)

当您移动到另一个标签之上时,它也会收到 MouseMove() 事件,因此您的程序可能会在两个标签之间切换 SelectedItemIndex

要解决此问题,除了您正在拖动的标签外,您应该忽略来自其他标签的鼠标事件。例如:

Private m_intDragIndex As Long

Private Sub lblRoom_DblClick(Index As Integer)
    m_intDragIndex = Index
End Sub

Private Sub lblRoom_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

    ' Only process events from the label that was double-clicked...
    If Index <> m_intDragIndex Then Exit Sub

    ...

End Sub

你没有说什么时候应该停止拖动,但是无论你做什么来结束拖动,一定要设置m_intDragIndex = -1或其他一些"invalid"值。