注册 登录
编程论坛 VB6论坛

MouseMove和GotFocus事件发生冲突,如何调和

sqiu_11 发布于 2015-10-17 22:22, 604 次点击
简单叙述:
       鼠标放在某Object1上,显示该Object1对应的数据库的值。按table键,光标转到下一个Object处,此时显示该光标Object处对应的数据库的值。
    如果鼠标放在Object1上,按table键,则始终显示鼠标处Object1对应的数据库的值。而不再随着光标变动。怎么办???
    问题大概出在, 鼠标放在某Object1上可以看做循环事件,如何通过程序按table键时跳出?如果给事件发生设个限制,那么一开始就无法触发此事件。。。很头疼
代码如下:
    Private Sub txtValue_MouseMove
            MouseOver = (0 <= X) And (X <= txtValue(Index).Width) And (0 <= Y) And (Y <= txtValue(Index).Height)
    '判断当前鼠标位置是否在Object1上
        If MouseOver Then
        '假如鼠标在Object1上, 则利用SetCapture将每一个鼠标事件都传递给Object1
        For i = 1 To 6
            If adoMillingSel.Recordset.RecordCount > 0 Then
                If adoMillingSel.Recordset.Fields(i) <> "" Then
                    StatusBar1.Panels(2 * i) = Format(adoMillingSel.Recordset.Fields(i).Value, "0.0")
                    SetCapture txtValue(Index).hwnd
                Else
                    StatusBar1.Panels(10) = ""
                    SetCapture txtValue(Index).hwnd
                End If
            End If
        Next i
    Else
        ' 假如鼠标不在Object1上, 则利用ReleaseCapture释放鼠标捕捉
        For i = 1 To 6
            StatusBar1.Panels(2 * i) = ""
            ReleaseCapture
        Next i
        End If
End Sub

Private Sub txtValue_GotFocus
   For i = 1 To 6
            If adoMillingSel.Recordset.RecordCount > 0 Then
                If adoMillingSel.Recordset.Fields(i) <> "" Then
                    StatusBar1.Panels(2 * i) = Format(adoMillingSel.Recordset.Fields(i).Value, "0.0")
                    SetCapture txtValue(Index).hwnd
                Else
                    StatusBar1.Panels(10) = ""
                    SetCapture txtValue(Index).hwnd
                End If
            End If
        Next i
End Sub
1 回复
#2
风吹过b2015-10-18 17:02
我想到的是,
三个变量
1 鼠标最后放在的位置
2 TAB 放在的位置
3 当前显示位置

如果是鼠标移动,如果计算出来的不是 1 的位置,那第设置1 和 3
否则,检测TAB ,检测 是否为2,如果不是,设置 2 和 3。
显示,按3去显
-----
逻辑:
鼠标优先,但鼠标不动时,TAB 动了,这时就使用TAB 的去显示。
1