2009-12-16 3 views
8

Я размышляю о том, чтобы сделать некоторые из моих приложений в WPF из WinForms, в настоящее время я работаю над комбинированной программой штрих-кодирования/ввода текста (формы пациента).Эквивалент свойства keypreview в WPF

Чтобы обрабатывать символы штрих-кода, я полагаюсь на свойство Keypreview в WinForms (потому что штрих-коды можно сканировать независимо от того, какой элемент управления имеет фокус).

Но я не могу найти свойство KeyPreview в VS2008 или VS2010 для приложения WPF.

Есть ли альтернативный подход/решение для обработки символов штрих-кода в WPF?

Rgrds Генри

ответ

3

WPF использует бульканье события и туннелирование. Другими словами, события перемещаются вниз и вверх по дереву визуальных элементов. Некоторые события будут иметь соответствующее событие Preview. Таким образом, у MouseDown будет PreviewMouseDown, на который вы можете ответить. Проверьте this link и прокрутите вниз до раздела событий ввода WPF.

+0

Спасибо за ссылку, должно быть возможно, чтобы как-нибудь поймать событие PreviewKeyDown, заглянет в него ... –

5

использовать переопределение в собственных UserControls или управления (это переопределение от UIElement)

protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e) { 
    base.OnPreviewKeyDown(e); 
    } 

, если вы хотите, чтобы просмотреть ключ вниз на любой элемент, который вы не делаете создания вы можете сделать это:

Label label = new Label(); 
label.PreviewKeyDown += new KeyEventHandler(label_PreviewKeyDown); 

, а затем иметь обработчик следующим образом: -

void label_PreviewKeyDown(object sender, KeyEventArgs e) { 

    } 

, если вы отметили событие как обработанное (e.Handled = true;) это остановит событие KeyDown.

3

Спасибо, что он работает! Единственная проблема заключалась в том, что я кодирую в VB не C#, но основная идея имеет место. Аккуратно создайте ярлык из воздуха и используйте его, чтобы вставить себя в поток событий.

Если кто-то заинтересован в том же растворе, но в VB для WPF, вот моя тестовая программа, ему удается бросить все «а» символы не типизированных, независимо от того, что элемент управления имеет фокус:

Class MainWindow 

    Dim WithEvents labelFromThinAir As Label 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     AddHandler MainWindow.PreviewKeyDown, AddressOf labelFromThinAir_PreviewKeyDown 
    End Sub 

    Private Sub labelFromThinAir_PreviewKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) 
     TextBox1.Text = e.Key ' watch 'em coming 
     If (44 = e.Key) Then e.Handled = True 
    End Sub 

End Class 

PS Это был мой первый пост в stackoverflow, действительно полезный сайт. Возможно, я смогу ответить на некоторые вопросы здесь, а потом :-)

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