Pergunta

Eu estou usando evento PreviewKeyDown em uma janela para receber todas as chaves de um scanner de código de barras. Os KeyEventArgs é uma enumeração e não me deu a seqüência real. Eu não quero usar TextInput como algumas das chaves pode ficar manipulados pelo próprio controle e não pode bolha até o evento TextInput.

Eu estou procurando uma maneira de converter as teclas que eu recebo em PreviewKeyDown a seqüência real. Olhei para o InputManager, TextCompositionManager etc, mas eu não estou encontrando uma maneira onde eu dou a lista de chaves e ele volta com uma corda. TextCompositionManager ou algo deve ser converter estas teclas para uma string que é o que está disponível em TextInput.

Foi útil?

Solução

Aqui é o evento que eu estou usando. O KeyDown recebe as chaves eo PreviewTextInput recebe o texto real. Então, em algum lugar entre as teclas estão sendo convertidas em texto.

 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)
            {
            }

Outras dicas

Chave -> conversão de texto é muito mais complicado do que você pensa, não há realmente nenhuma maneira de mapear um único golpe chave para um único personagem, porque em algumas línguas e alguns casos, você precisa de várias combinações de teclas para compor um único caractere

Uma vez que você está interessado em entrada de um scanner de código de barras (que eu assumo só gerará um pequeno subconjunto do que janelas pode lidar, talvez única ASCII talvez até menos), você pode construir a tabela de conversão a si mesmo e rígido código-lo em seu programa - é muito mais fácil, em seguida, para lidar com toda a loucura que a manipulação de texto do Windows faz (para se divertir, lookup "chaves dead").

Ok, roubado de este post .

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

static public Key ResolveKey(char charToResolve)
{    
    return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve));
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top