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"值。
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"值。