2016-09-01 3 views
0

키를 누를 때마다 부울을 true로 설정해야하는 windows 양식 응용 프로그램을 작성하고 있습니다.C# keypress가 대신 필드에 씁니다.

그러나 충분히 간단합니다. 그러나 텍스트 필드와 콤보 박스가있는 키를 누르려고 할 때마다 텍스트 필드와 콤보 상자가 있기 때문에 간단하게 씁니다. 응용 프로그램에서 다른 곳을 클릭해도 상관 없습니다.

텍스트 필드와 콤보 박스없이 프로젝트를 만들려고했는데 완벽하게 작동합니다.

동일한 양식의 입력 필드와 키 누르기 이벤트를 모두 가질 수 있습니까?

답변

2

모든 키 입력 이벤트가 양식의 이벤트 처리기로 전달되도록 Form.KeyPreview 속성을 설정하십시오. 실행이 이벤트 핸들러를 치면, 각 키 스트로크에 대해 Boolean을 설정하는 것을 포함하여 필요한 변수를 설정할 수 있습니다.

0

여기에 대한 지침서 How to: Handle Keyboard Input at the Form Level.

Windows Forms는 메시지가 컨트롤에 도달하기 전에 폼 수준에서 키보드 메시지를 처리 ​​할 수있는 기능을 제공합니다.

양식 수준에서 키보드 메시지를 처리합니다.

가 시작 폼의 키 누름 또는 KeyDown 이벤트를 처리하고 폼의 KeyPreview 속성을 true로 설정 그래서 키보드 메시지는 그들이 양식에 모든 컨트롤에 도달하기 전에 형태로 수신 .

public Form1() 
    { 
     this.KeyPreview = true; 
     this.KeyPress += 
      new KeyPressEventHandler(Form1_KeyPress); 
    } 

    // Detect all numeric characters at the form level and consume 1, 
    // 4, and 7. Note that Form.KeyPreview must be set to true for this 
    // event handler to be called. 
    void Form1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar >= 48 && e.KeyChar <= 57) 
     { 
      MessageBox.Show("Form.KeyPress: '" + 
       e.KeyChar.ToString() + "' pressed."); 

      switch (e.KeyChar) 
      { 
       case (char)49: 
       case (char)52: 
       case (char)55: 
        MessageBox.Show("Form.KeyPress: '" + 
         e.KeyChar.ToString() + "' consumed."); 
        e.Handled = true; 
        break; 
      } 
     } 
    } 
관련 문제