2009-05-15 4 views
19

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

나는 훅으로 보았다. Form KeyPress 이벤트에 넣거나 "Cancel"DialogResult 등을 시뮬레이션하려고 시도하는 것입니다.이 작업에 대한 여러 가지 방법이 있습니다. ...

그래서 질문입니다. 바인딩에 대해 가장 명확한 방법은 무엇입니까? 변경 사항을 저장하지 않고 대화 상자를 닫기위한 ESC 키?

경험이 많은 분들의 도움을 받으십시오.

답변

27

취소 단추를 참조하도록 폼의 CancelButton 속성을 설정하십시오.

this.CancelButton = this.cancelButton; 

Visual Studio에서 양식의 속성을 통해이 문제를 설정하고 코드는 Form.Designer에 추가됩니다

+7

Enter 키에 해당하는 "AcceptButton"도 있습니다. 이 응답 방법의 장점은 키 누르기보다 입력 및 이탈을 연결하는 것이 더 많다는 것입니다.이 메서드를 사용하면 버튼에 올바른 시각적 힌트가 렌더링됩니다 (예 : AcceptButton이 더 두꺼운 테두리를 가짐). – stusmith

+5

취소 및 확인 버튼의 DialogResult 속성도 설정하는 것을 잊지 마십시오. – NascarEd

6

또한 취소 버튼 폼의 CancelButton을 속성을 설정할 수 있습니다. cs 파일

1

어느 정도까지는 개발 환경에 따라 다릅니다. .NET에서는 (vb.old 에서처럼) 내장 된 "취소 단추"속성이 있습니다.이 속성이 설정되어 있으면 단추 사용자가 'ESC'키를 누를 때마다 '클릭'됩니다. "

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

메모리에서 표준 메시지와 대화 상자는 기본적으로 위의 논리를 따릅니다. 물론 메시지 상자의 기본 단추는 사용자가 적극적으로 주장 할 필요가없는 곳에서 지정할 수 있습니다 그들은하고 싶다.

1

이 작업을 수행 할 수 있습니다

button b = new button(); 
b.click = button_click; 
this.cancelbutton = b; 


protected void button_click(object sender,eventargs e) 
{ 
    this.close(); 
} 
9

을 이렇게하려면 당신이 processcmdkey 오버라이드 (override) 할 수있는 취소 버튼이없는 경우 :

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

줄'this.Close();'바로 앞에'DialogResult = DialogResult.Cancel; '을 삽입 할 수 있습니다. –

0
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 

이 인걸 미안해이 들어있다 시도를 Form을 닫을 때 예 또는 아니오를 확인하기위한 messageBox를 표시합니다.이 코드를 Keydown이라는 이름의 양식 이벤트 내에서 양식에 추가 할 수 있습니다. 여기서 "대시 보드"는 닫힐 양식의 이름입니다. 이 코드는 예 또는 아니오 버튼을 사용하여 메시지 상자를 표시합니다. 예를 선택하면 해당 양식이 닫힙니다. 아니오를 선택하면 작업이 취소됩니다. 양식이 동일하게 유지됨

+1

답변에 대한 설명을 추가하십시오. :) –

+0

예. 그래 ..당신은이 코드를 Keydown이라는 이름의 이벤트 이벤트 안에 폼에 추가 할 수 있습니다. 여기서 "대시 보드"는 닫힐 양식의 이름입니다. 이 코드는 예 또는 아니오 버튼을 사용하여 메시지 상자를 표시합니다. 예를 선택하면 해당 양식이 닫힙니다. 아니오를 선택하면 작업이 취소됩니다. 양식이 동일하게 유지됨 – Prakash

+0

위에서 언급 한 코드를 사용해 보셨습니까? – Prakash

관련 문제