2016-08-16 5 views
2

rfid 카드를 통해 사용자를 인증해야하는 Visual C# 2015에서 프로그램을 개발 중입니다. 내가 사용하고있는 장치는 단순히 키보드를 에뮬레이트합니다. 메모장을 연 다음 리더기 근처에서 태그 나 카드를 스 와이프하면 대부분의 바코드 리더가 작동하는 것처럼 일련 번호 + 입력을 받게됩니다. 필자는 분명히 사용자가 코드를 보거나 텍스트 상자에 입력 할 수 없게하기 위해 KeyDown 이벤트를 사용하여 모든 문자를 입력하는 것으로 인증시 "해당 키보드"의 입력을 잡는 것이 좋습니다. 버퍼 변수에 넣은 다음 엔터를 누를 때 (즉, 코드의 끝) 데이터베이스와 대조하여 확인하십시오.RFID 카드를 읽는 동안 Visual C# 키 탐지 변형 (D 문자가 추가됨)

문제는 말하자면 카드가 12345678로 표시되었다는 것입니다. 이것은 메모장이나 텍스트 상자에 표시됩니다. 그러나 버퍼를 표시하면 "D1D2D3D4D5D6D7D8"이됩니다. 데이터베이스의 각 문자 앞에 D를 추가하여 문제를 간단히 피할 수는 있지만 실제로 이런 일이 발생하는지 이해하고 싶습니다. 코딩의 문제인가, 아니면 keydown 이벤트가 서로 너무 가깝습니까? 아무도 단서가 있습니까? 주셔서 감사합니다

편집 :

다음

코드입니다 :

XAML은

<Window x:Class="myApp.MainWindow" 
    (...) 
    KeyDown="OnKeyDownHandler"> 

C#

당신에게 실제 키를주고있다 KeyDown 이벤트를 누르면되고
private void OnKeyDownHandler(object sender, KeyEventArgs e) 
    { 
     if (!authenticated) { 

      if (e.Key != Key.Enter) 
      { 
       cardReadBuffer += e.Key; 
      } 
      else 
      { 
       //this returns every character preceded by a D; doesn't happen 
       //if I type some characters on my keyboard and then press enter 
       MessageBox.Show(cardReadBuffer); 
       cardReadBuffer = ""; 
      } 
     } 
    } 
+0

'그러나 버퍼를 표시 할 때 ... '이것이 우리에게 보여줘야하는 코드입니다. – LarsTech

답변

2

, 그래서 TextInput 이벤트를 사용하여 문자열 부분을 처리하십시오 :

private void OnKeyDownHandler(object sender, KeyEventArgs e) {  
    if (e.Key == Key.Enter) { 
    MessageBox.Show(cardReadBuffer); 
    cardReadBuffer = ""; 
    e.Handled = true; 
    } 
} 

private void OnTextInput(object sender, TextCompositionEventArgs e) { 
    cardReadBuffer += e.Text; 
} 
+0

고맙습니다 만 작동하지만 실제로 키보드에서 누를 수있는 실제 키와 rfid 판독기에서 누를 수있는 "키"의 차이는 무엇입니까 (기술적으로 말해서) "D1"키가 눌러 진 결과입니다 . 그리고 여전히 일반 문자를 텍스트 입력으로 사용합니다. – didrocks66

+2

@ didrocks66 숫자 패드의 숫자 키를 누르면 (키보드에 있다고 가정) "NumPad1NumPad2NumPad3 ..."이 표시되거나 Shift-X를 누르면 "LeftShiftX"가 표시됩니다. 이 이벤트는 TextBox에 전송되는 "값"이 아니라 누르는 키를 알려줍니다. – LarsTech

관련 문제