2009-09-29 4 views
2

Я использую событие PreviewKeyDown в окне, чтобы получить все ключи от сканера штрих-кода. KeyEventArgs - это перечисление и не дает мне фактическую строку. Я не хочу использовать TextInput, так как некоторые из ключей могут обрабатываться самим элементом управления и не могут появиться в событии TextInput.Преобразование полученных ключей в PreviewKeyDown в строку

Я ищу способ конвертировать Ключи, которые я получаю в PreviewKeyDown, к фактической строке. Я посмотрел на InputManager, TextCompositionManager и т. Д., Но я не нахожу способ, которым я предоставляю список ключей, и он возвращается со строкой. TextCompositionManager или что-то должно преобразовывать эти Ключи в строку, доступную в TextInput.

+0

У кого-нибудь есть что-нибудь? – RRR

ответ

1

Это мероприятие, которое я использую. KeyDown получает ключи, и PreviewTextInput получает фактический текст. Таким образом, где-то между клавишами преобразуются в текст.

public Window1() 
      { 
       InitializeComponent(); 
       TextCompositionManager.AddPreviewTextInputStartHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput)); 
       this.AddHandler(Window.KeyDownEvent, new System.Windows.Input.KeyEventHandler(Window_KeyDown), true); 
      } 

    private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e) 
      { 
      } 

    private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
      { 
      } 
+0

Что .NET Framework возвращает необработанные коды сканирования в событиях KeyUp/KeyDown, просто «невозможно» (как в «слишком шокирующем, чтобы быть правдой»). Так что же нам делать? Вместо этого используйте событие «PreviewTextInput». Мы получаем строковое представление нажатой клавиши следующим образом: 'void KeyboardNavigation (object sender, TextCompositionEventArgs e) {string typedChar = e.Text; } ' –

-3

Хорошо, украдено у this post.

[DllImport("user32.dll")] 
static extern short VkKeyScan(char ch); 

static public Key ResolveKey(char charToResolve) 
{  
    return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve)); 
} 
+0

e as PreviewKeyDownEventArgs дает ошибку компиляции. KeyEventArgs нельзя отнести к PreviewKeyDownEventArgs – RRR

+0

Я хочу помочь вам здесь, но вам нужно дать мне больше информации. Можете ли вы добавить определение вопроса или, возможно, ссылку через MSDN на вопрос? – Gregory

+0

Я не мог опубликовать все это в комментариях. Поэтому я разместил его в ответе ниже. – RRR

1

Key -> преобразование текста является гораздо более сложным, чем вы думаете, что нет на самом деле никакого способа отображения одной клавиши клавиатуры к одному символу, так как в некоторых языках и некоторых случаях требуется несколько нажатий клавиш, чтобы составить единый персонаж.

Поскольку вас интересует ввод с помощью сканера штрих-кода (который, как я предполагаю, будет генерировать только небольшое подмножество окон, возможно, только ASCII, возможно, даже меньше), вы можете сами построить таблицу преобразования и скопировать ее в свой программа - намного легче справиться со всеми сумасшествиями, которые делает обработка текста Windows (для удовольствия, поиска «мертвых ключей»).

 Смежные вопросы

  • Нет связанных вопросов^_^