簡體   English   中英

如何使用“esc”鍵退出所有 forms?

[英]How to exit all forms with “esc” key?

您好我正在修改一個 WinForms 程序。 我想讓按 Esc 鍵退出任何表單成為可能。

我試圖將事件綁定到這個方法,它可以工作。

private void form_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Escape)
    {
        this.Dispose();
    }
}

但是我想將此事件應用於我項目中的很多 forms,避免粘貼此方法並將其手動綁定到每個表單的事件的聰明方法是什么?

您可以使用裝飾器模式,例如:

class CustomForm : Form
{
    public CustomForm()
    {
        // automatically bind a keypress event 
        this.KeyPress += new EventHandler(form_KeyPress);
    }

    private void form_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Escape)
        {
            this.Close(); // Close instead of disposing
        }
    }
}

然后,您希望具有此行為的所有 forms 都可以繼承自CustomForm而不是Form

您應該通過調用Close()而不是Dispose()來覆蓋Form base class 的ProcessCommandKey方法,因為調用 dispose 不是一個好習慣:

public partial class EscapableForm
{

  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
  {
    switch ( keyData )
    {
      case Keys.Escape:
        Close();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
  }

}

在這里重寫方法比使用事件更好,因為它允許更好的設計一致性。

因此,無論用戶在哪里,無論活動控件如何,都會捕獲鍵,您可以管理您想要的內容。 您還可以添加任何 UX 條件,例如AllowClose條件變量。

為了不重復代碼,您可以創建自定義表單 class 文件,並以 @Cid 建議的任何最終形式替換 Visual STudio 設計器使用的標准表單基礎 class。

暫無
暫無

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

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