>

KeyDown 의 차이점을 아는 사람이 있습니까?  이벤트, KeyPress  이벤트와 KeyUp  행사? msdn 사이트를 확인했지만 많이 설명하지 않습니다.

각 이벤트가 발생했을 때 누구나 논리적으로 간단하게 말해 줄 수 있습니까? 키를 누르면 위의 모든 이벤트가 발생한다고 생각합니다. 그래서 그들 사이의 정확한 차이점은 무엇입니까?


  • 답변 # 1

    KeyDown : 사람이 키를 누를 때 발생합니다 (키보드에서 키의 손가락을 처음 감지하면 키를 누를 때 발생합니다)

    KeyPress : 키를 눌렀다 떼면 발생합니다.

    키업 : 키를 놓을 때 발생합니다

    위에서 설명한 순서대로 키를 눌렀다 놓을 때 이러한 모든 이벤트가 발생하는 것이 맞습니다.

  • 답변 # 2

    MSDN 설명서에는 세 가지 이벤트가 상당히 명확하게 발생하는 순서가 나와 있습니다. :

    와이즈 비즈

    Key events occur in the following order:

      KeyDown

      KeyPress

      KeyUp

    사용자가 키보드를 누른 상태에서 키보드의 키를 누르면 바로 상승합니다.

    KeyDown 키를 누르고있는 동안character키에 대해서는키가 발생합니다 (KeyDown 및 KeyUp과 달리 키가 아닌 키에 대해서도 발생). 이는 KeyDown 또는 KeyUp보다 "상위 레벨"이벤트이므로 다른 데이터를 KeyPress 에서 사용할 수 있습니다 .

    EventArgs 사용자가 키보드에서 키를 놓으면 발생합니다.

    일반적으로 KeyUp 를 처리해야합니다  응용 프로그램에서 이벤트. 사용자가이후키를 놓을 때까지 UI에서 작업을 시작해서는 안됩니다. 그리고 KeyUp 이후   KeyUp 보다 낮은 수준의 이벤트입니다 , 누른 키에 대한 정보가 항상 많으며 문자가 아닌 키를 처리하는 데에도 유용합니다.

    <시간>

    이 이벤트들에 대해모두에 주목해야 할 것은 포커스가있는 컨트롤에서만 발생한다는 것입니다. 즉, 양식의 버튼 컨트롤에 현재 포커스가 있으면양식의 주요 이벤트가 발생하지 않습니다. .NET을 처음 사용하는 프로그래머에게는 혼동을 줄 수 있습니다. 이를 처리하는 가장 좋은 방법은 양식의 KeyPress 를 재정의하는 것입니다.  방법 :

    ProcessCmdKey
    
    

  • 답변 # 3

    키업을 사용하고 싶지 않은 경우가 있습니다 :

    목록 상자가 있고 행에서 Enter 키를 누르면 편집기 대화 상자가 나타납니다. 문제 : 사용자가 편집기의 확인 버튼에서 Enter 키를 누르면 KeyUp (e.KeyCode = Enter) 이벤트가 목록 상자로 다시 누출되어 편집기가 다시 열립니다. 사용자가 편집기의 OK 버튼에서 스페이스 바를 누르면 발생하지 않습니다. 이 경우 KeyUp (e.KeyCode = Space) 이벤트는 편집기에서 닫히기 전에 처리됩니다.

    내가 사용하는 선택 휴리스틱이 있습니다 :

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.A))
        {
            MessageBox.Show("You pressed Ctrl+A!");
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
    
    

    * 작업이 일반적으로 사용되는 제품에서 수행 할 수있는 작업 인 경우 Ctrl + A (예 : '모두 선택')와 같은 Microsoft Office와 같은 경우 Microsoft 행동을 모방합니다. 익숙 했어.

  • 답변 # 4

    If I'm handling the Enter key and I need to guard against a case like the one above then I use KeyDown Else if I'm handling key combinations (e.g. CTRL+C) then I favor* KeyDown (KeyUp can make these awkward) Else if I am allowing press & hold autorepeat then I use KeyDown Else I use KeyUp  그런 다음 KeyDown  그런 다음 KeyPress  내가 찾은 순서입니다.

    보통 당신은 KeyUp 를 연결하고 싶어  사용자가 shift-click 조작에서와 같이 제어 키 모드를 수정하여 다중 모드 입력을위한 키를 누르고있는 응용 프로그램의 경우. 와이즈 비즈  간단한 키 입력 유형 논리를위한 것입니다. 키 입력 만하면됩니다. 와이즈 비즈  다른 무언가가 KeyDown 를 처리 한 후에 실행되는 논리를 넣는 것에 매료되어 있습니다. , 주요 KeyPress 후에 텍스트 편집 상자의 내용을 수정하는 것과 같습니다.  논리가 적용되었습니다. 솔직히 KeyUp 를 사용하지 않습니다  이 모든 것이 있지만 때로는 다른 무언가가 KeyPress 를 처리 한 후 메시지를 얻는 유일한 방법입니다.  무슨 일이 있었는지 확인/수정해야합니다.

  • 답변 # 5

    다른 답변 외에도

    이 사건들 중 어떤 사건을 파악하려고 할 때, 당신의 행동을 연결시켜야 할 때, KeyPress 는  키를 누르고 있으면 이벤트가다중번 실행됩니다. 때로는이 동작을 원하지만 때로는 그렇지 않습니다. 이를 바탕으로 다음과 같은 사용법을 제안합니다 (내 경험에 따라).

    (이벤트가 시작되는 순서)

    와이즈 비즈

    .

    와이즈 비즈

    .

    와이즈 비즈 KeyUp

관련 자료

  • 이전 python - 링크리스트 노드 인쇄
  • 다음 javascript - 여러 테이블에서 총 합계를 얻는 방법