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



2 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 키를 바인딩하는 가장 깨끗한 방법은 무엇입니까?

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




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

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

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




    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이라는 이름의 양식 이벤트 내에서 양식에 추가 할 수 있습니다. 여기서 "대시 보드"는 닫힐 양식의 이름입니다. 이 코드는 예 또는 아니오 버튼을 사용하여 메시지 상자를 표시합니다. 예를 선택하면 해당 양식이 닫힙니다. 아니오를 선택하면 작업이 취소됩니다. 양식은 동일하게 유지된다.



Related