确定选择是否已由用户输入(鼠标或kb)进行了异常提交

时间:2010-02-16 15:17:51

标签: wpf keyboard mouse selection

如何确定是以编程方式还是通过用户输入进行选择。

我开始写一些东西但是因为有更多的工作,我决定寻求一些开箱即用的程序或依靠社区经验。

所以这就是我写的(注意,C#中的答案也很受欢迎):

Private Shared Function IsUserSelect() As Boolean
    If Mouse.LeftButton = MouseButtonState.Pressed Then Return True

    Dim shift As Boolean
    shift = Keyboard.IsKeyDown(Key.LeftShift)
    If Not shift Then shift = Keyboard.IsKeyDown(Key.RightShift)

    If shift Then
        Dim arrow As Boolean
        arrow = Keyboard.IsKeyDown(Key.Right)
        If Not arrow Then arrow = Keyboard.IsKeyDown(Key.Left)
        If arrow Then Return True
    End If

    Return False
End Function

在TextBox的OnSelectionChanged上调用,并确定选择是由用户还是虚拟进行。

但后来我意识到还有更多选择:Shift + Home,Shift + PageDown等等 我宁愿相信一个经过测试的功能,然后重新发明了穿刺轮 谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

我改进了我的功能,但我仍然愿意接受这些想法:

Private Shared ReadOnly SelectionModifiers() As Key = 
     New Key() {
         Key.Left, 
         Key.Right, 
         Key.Up, 
         Key.Down, 
         Key.PageDown, 
         Key.PageUp, 
         Key.Home, 
         Key.End
     }

Private Shared Function IsUserSelect() As Boolean
    If Mouse.LeftButton = MouseButtonState.Pressed Then Return True

    If ((Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift) Then
        Return SelectionModifiers.Any(Function(key) Keyboard.IsKeyDown(key))
    End If

    Return False
End Function