VB6中标签的快速鼠标移动

VB6中标签的快速鼠标移动,vb6,Vb6,lblRoom是标签的控制数组,brdrRoom是形状的控制数组,双击每个标签,我们可以用鼠标拖动它。当一个标签在其他标签上缓慢移动时并没有问题,它会平滑移动,但当鼠标快速移动并且到达其他标签的中心时,它会移动,选定的标签会静止。 MouseMove的代码段如下所示: Private Sub lblRoom_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

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
Private m_intDragIndex尽可能长
私有子lblRoom\U DblClick(索引为整数)
m_intDragIndex=索引
端接头
私有子lblRoom\u MouseMove(索引为整数,按钮为整数,移位为整数,X为单个,Y为单个)
'仅处理来自双击标签的事件。。。
如果索引m_intDragIndex,则退出Sub
...
端接头
您没有说何时应该停止拖动,但无论您要做什么来结束拖动,请确保设置
m_intDragIndex=-1
或其他一些“无效”值