2009-09-29 6 views
2

바코드 스캐너에서 모든 키를 받기 위해 창에서 PreviewKeyDown 이벤트를 사용하고 있습니다. KeyEventArgs는 열거 형이며 실제 문자열을 제공하지 않습니다. 일부 키가 컨트롤 자체에서 처리 될 수 있으며 TextInput 이벤트까지 버블 링되지 않을 수 있으므로 TextInput을 사용하고 싶지 않습니다.PreviewKeyDown의받은 키를 문자열로 변환합니다.

PreviewKeyDown에서 얻은 키를 실제 문자열로 변환하는 방법을 찾고 있습니다. InputManager, TextCompositionManager 등을 살펴 봤지만 키 목록을 제공하는 방법을 찾지 못하고 문자열로 돌아옵니다. TextCompositionManager 또는 무엇인가가이 키를 TextInput에서 사용할 수있는 문자열로 변환해야합니다.

+0

누구나 갖고 계신 것이 있으십니까? PreviewKeyDownEventArgs가 – 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 일 때 컴파일 오류가 발생합니다. KeyEventArgs를 PreviewKeyDownEventArgs로 캐스팅 할 수 없습니다. – RRR

+0

여기에서 도움을 드리고 싶지만 좀 더 자세한 정보를 제공해야합니다. 이벤트 정의 또는 MSDN을 통한 링크를 질문에 추가 할 수 있습니까? – Gregory

+0

나는 코멘트에 전체 것을 게시 할 수 없었다. 그래서 나는 아래 답변에 그것을 올렸다. – RRR

1

키 -> 텍스트 변환은 일부 언어 어떤 경우에는 단일를 구성하는 여러 개의 키 입력을 필요로하기 때문에 단일 문자에 하나의 키 스트로크를지도 할 수있는 방법이 실제로 없다, 당신이 생각하는 것보다 훨씬 더 복잡 캐릭터.

바코드 스캐너의 입력에 관심이 있으시다면 (변환 할 테이블을 처리 할 수있는 작은 하위 집합 만 생성 할 수도 있습니다. 어쩌면 ASCII 만 가능할 수도 있습니다) 변환 테이블을 직접 작성하고 프로그램 - Windows 텍스트 처리 (재미, 조회 "데드 키")가하는 모든 광란을 처리하는 것이 훨씬 쉽습니다.

관련 문제