MDI 상위 폼이 있습니다. 사용자가 Enter 키를 누르면 응용 프로그램을 종료하고 싶습니다. 나는 형태 (버튼, 텍스트 상자 등)에 어떤 클릭 컨트롤이 없을 때 keydown 이벤트에서 잘못된 keyvalues가 전달됩니다.
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == (int)Keys.Enter)
{
Application.Exit();
}
}
이 지금은 잘 작동
다음과 같이 가 나는를 keyDown 이벤트를 확인합니다.e.KeyValue
에는 Enter 키 (13) 값이
(int)
입니다. 하지만 MDI 폼에 버튼이나 텍스트 상자를 넣으면은의 keyvalue 즉 18을 가져옵니다. 왜 그렇게 되나요?
이제 Alt+Enter
을 누르면 양식이 닫힙니다. 뿐만 아니라 당신은 조금 더 빨리 키 누름을 처리 할 필요가 사전
예, 완벽하게 작동했습니다. 방금 _KEYUP 및 _ENTER를 바꿔서 답을 편집했습니다. m.MSG는 _KEYUP을 제공하고 _ENTER는 제공하지 않기 때문입니다. – Marshal
아직도 알고 싶습니다. 이유는 무엇입니까? 나는 그것을 몇 분 안에 대답으로 받아 들일 것이다. 나는 누군가가 내 '왜 그렇게'부분에 대답하기 위해 되돌아 간다면 나는 기다리고있다! – Marshal
키는 현재 포커스가있는 컨트롤에 의해 처리됩니다. 그래서 "Enter"키를 누르면 포커스가있는 컨트롤이 먼저 키를 처리합니다. 추가 키 "Alt"를 사용하면 키를 처리하는 데 집중 컨트롤이 적용되지 않습니다. "Ctrl"+ "Enter"를 시도해 볼 수도 있습니다 - 또한 양식에 의해 처리되어야합니다. 특별한 Form.KeyPreview 속성이 있지만 대부분의 경우 부적절하게 작동합니다. 따라서 컨트롤 앞에있는 키를 처리하기 위해 폼의 ProcessKeyPreview 또는 ProcessDialogKey 메서드를 재정의해야합니다. –