簡體   English   中英

退出按鈕以關閉 C# 中的 Windows 窗體窗體

[英]Escape button to close Windows Forms form in C#

我嘗試了以下方法:

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if ((Keys) e.KeyValue == Keys.Escape)
        this.Close();
}

但它不起作用。

然后我嘗試了這個:

protected override void OnKeyDown(KeyEventArgs e)
{
    base.OnKeyDown(e);
    if (e.KeyCode == Keys.Escape)
        this.Close();
}

仍然沒有任何效果。

我的 Windows 窗體窗體屬性上的 KeyPreview 設置為 true...我做錯了什么?

無論是否正確分配事件處理程序、 KeyPreviewCancelButton等,這都將始終有效:

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

您應該能夠將 Form 的CancelButton屬性設置為您的 Cancel 按鈕,然后您就不需要任何代碼了。

假設您有一個“取消”按鈕,設置表單的CancelButton屬性(在設計器中或在代碼中)應該會自動處理這個問題。 只需將要關閉的代碼放在按鈕的Click事件中即可。

接受的答案確實是正確的,我已經多次使用這種方法。 突然,它不再起作用了,所以我覺得很奇怪。 主要是因為我的斷點不會被ESC鍵擊中,但它會擊中其他鍵。

調試后,我發現表單中的一個控件正在使用以下代碼覆蓋ProcessCmdKey方法:

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

...這阻止了我的表單獲取ESC鍵(注意return true )。 因此,請確保沒有子控件接管您的輸入。

您在表單選項中將 KeyPreview 設置為 true,然后向其中添加 Keypress 事件。 在您的按鍵事件中,您鍵入以下內容:

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 27)
    {
        Close();
    }
}

key.Char == 27是 ASCII 碼中的轉義值。

您需要將此添加到事件“KeyUp”中。

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

你也可以觸發一些其他的形式。

例如,如果您編輯 Form CancelButton 屬性並將按鈕設置為 Cancel,則觸發 Cancel-Button。

在您按如下方式處理取消按鈕以關閉表單的代碼中:

    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.Abort;
    }

Escape 按鈕是指 Escape 鍵嗎? 從你的代碼來看,我認為這就是你想要的。 您也可以嘗試 Application.Exit(),但 Close 應該可以工作。 你有工作線程嗎? 如果非后台線程正在運行,這可能會使應用程序保持打開狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM