Winforms에서 대화 상자를 닫으려면 ESC 키를 어떻게 얻습니까?


Answers

취소 버튼이 없을 때 이렇게하려면 processcmdkey를 무시할 수 있습니다.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if (keyData == Keys.Escape)
  {
    this.Close();
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
Question

요새 소프트웨어를 사용하는 경우 ESC 키를 사용하면 변경하지 않고 대화 상자를 닫을 수 있습니다. 특히 대화 상자에 대화 상자에 취소 버튼이있을 수 있기 때문에 취소 버튼으로 마우스 나 탭을 클릭 할 필요가 없습니다. "죄송합니다, 그렇게 할 의도가 없었습니다!"라고 말하는 좋은 방법입니다. 소프트웨어에. 사실, 나는이 기능을 구현하지 않는 소프트웨어에 짜증을 느낀다. Winforms의 두포 (hood)에서 이미 수행되지 않았다는 것을 믿을 수 없다. 나에게 직관적 인 것처럼 보인다.

Form KeyPress 이벤트에 연결하거나 "Cancel"DialogResult 등을 시뮬레이트하려고 시도했습니다.이 문제에 대해 여러 가지 방법이있는 것 같습니다.

따라서 질문은 변경 사항을 저장하지 않고 대화 상자를 닫기 위해 ESC 키를 바인딩하는 가장 깨끗한 방법은 무엇입니까?

이것에 대한 경험이있는 사람들의 도움은 매우 감사합니다!




    If e.KeyCode = Keys.Escape Then
        If MsgBox("Are you sure to exit system (Y/N) ?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then Exit Sub
        dashboard.Close()

    ElseIf e.KeyCode = Keys.F5 Then
        MessageBox.Show("F5")
    End If

이 사람을 사용해보십시오. 이것은 For FormBox를 닫기 전에 Yes 또는 No를 확인하는 messageBox를 표시합니다.이 코드를 Keydown이라는 이름의 양식 이벤트 내에서 양식에 추가 할 수 있습니다. 여기서 "대시 보드"는 닫힐 양식의 이름입니다. 이 코드는 예 또는 아니오 버튼을 사용하여 메시지 상자를 표시합니다. 예를 선택하면 해당 양식이 닫힙니다. 아니오를 선택하면 작업이 취소됩니다. 양식은 동일하게 유지된다.




어느 정도 그것은 당신의 개발 환경에 달려 있습니다 - .NET에 내장 된 (vb.old 에서처럼) 폼은 "Cancel Button"속성을 가지고 있습니다 "이 속성이 설정되면 버튼은 사용자가 'ESC'키를 누릅니다. "

'Enter'키에 해당하는 "AcceptButton"속성이 있습니다.

메모리에서 표준 메시지와 대화 상자는 기본적으로 위의 논리를 따릅니다. 물론 사용자가 원하는대로 수행 할 필요가없는 메시지 상자의 기본 단추를 지정할 수는 있지만 .