program tip

Esc 키를 누를 때 양식을 닫는 방법은 무엇입니까?

radiobox 2020. 11. 30. 08:01
반응형

Esc 키를 누를 때 양식을 닫는 방법은 무엇입니까?


Windows Forms 응용 프로그램 에서 단추를 누르면 나타나는 작은 양식이 있습니다.

Esc 키를 눌러 양식을 닫고 싶습니다. 어떻게 할 수 있습니까? 사용할 이벤트 (form_closing?)를 잘 모르겠습니까?


양식에 이미 양식을 닫는 단추가있는 경우 양식에 속성을 설정하여이를 수행 할 수 있습니다.

CancelButton양식 속성을 해당 버튼으로 설정합니다.

사용자가 Esc키를 누를 때 클릭되는 단추 컨트롤을 가져 오거나 설정합니다 .Gets or sets the button control that is clicked when the user presses the key.

취소 버튼이없는 경우 KeyDown핸들러 를 추가하고 다음 과 같이 Esc 키를 확인해야합니다.

private void Form_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Escape)
    {
        this.Close();
    }
}

또한 KeyPreview속성을 true 로 설정 해야합니다.

포커스가있는 컨트롤에 이벤트가 전달되기 전에 폼에서 키 이벤트를 받을지 여부를 나타내는 값을 가져 오거나 설정합니다.

그러나 Gargo가 그의 대답 에서 지적했듯이 이것은 Esc대화 상자의 컨트롤에 대한 편집을 중단하기 위해 누르는 것도 대화 상자를 닫는 효과 가 있음을 의미합니다 . 이를 방지하려면 ProcessDialogKey다음과 같이 메서드 를 재정의하십시오 .

protected override bool ProcessDialogKey(Keys keyData)
{
    if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
    {
        this.Close();
        return true;
    }
    return base.ProcessDialogKey(keyData);
}

내가 찾은 가장 좋은 방법은 "ProcessDialogKey"함수를 재정의하는 것입니다. 이 방법은 다른 컨트롤이 누른 키를 사용하지 않을 때만 함수가 호출되기 때문에 열린 컨트롤을 취소하는 것이 여전히 가능합니다.

이것은 CancelButton을 설정할 때와 동일한 동작입니다. KeyDown 이벤트를 사용하면 항상 실행되므로 열려있는 편집기의 편집을 취소해야하는 경우에도 양식이 닫힙니다.

protected override bool ProcessDialogKey(Keys keyData)
{
    if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
    {
        this.Close();
        return true;
    }
    return base.ProcessDialogKey(keyData);
}

양식에 취소 단추가있는 경우 Form.CancelButton 속성을 해당 단추로 설정 한 다음 Esc 키를 누르면 효과적으로 '단추를 클릭'할 수 있습니다.

이러한 단추가없는 경우 Form.KeyPreview 속성을 확인하십시오 .


Button cancelBTN = new Button();
cancelBTN.Size = new Size(0, 0);
cancelBTN.TabStop = false;
this.Controls.Add(cancelBTN);
this.CancelButton = cancelBTN;

참고 URL : https://stackoverflow.com/questions/3526752/how-to-make-a-form-close-when-pressing-the-escape-key

반응형