Определите, был ли выбор физически зафиксирован пользовательским вводом (мышью или kb) - PullRequest
1 голос
/ 16 февраля 2010

Как определить, сделан ли выбор программным путем или с помощью пользовательского ввода.

Я начал что-то писать, но так как есть больше работы, я решил искать какую-то готовую процедуру или полагаться на сообществоопыт.

Итак, вот что я написал ( Примечание , что ответы в 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

Для вызова в OnSelectionChanged TextBox иопределить, сделан ли выбор пользователем или виртуально.

Но тогда я понимаю, что есть гораздо больше вариантов: Shift + Home, Shift + PageDown и т. д.
Я бы предпочел доверять проверенной функции, а затем заново изобретатьпрокол колеса.
Спасибо за чтение.

1 Ответ

0 голосов
/ 16 февраля 2010

Я улучшил свою функцию, но я все еще открыт для идей:

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
...