2013-07-25 45 views
0

我有一個表單proFileDialog調用窗體mnuForm上使用ShowDialog()。當我打一個給定的密鑰時,我想要關閉這兩種形式。看起來我沒有任何麻煩在文本框上做這個工作來觸發一個消息框,但是在表單上我必須做一些錯誤的事情。當我按下回車鍵時,下面的代碼絕對沒有任何反應。如何關閉keydown事件中的表單?

void proFileDialog_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode==Keys.Enter) 
     { 
      proFileDialog.Close(); 
      this.Close(); 
     } 
    } 

隨着proFileDialog.KeyPreview =真會發生反應,最關鍵的,但我沒有得到回車鍵,或其他非字母/數字鍵的響應。

+0

你想關閉整個應用程序還是隻關閉窗體? –

+0

這沒關係。無論你願意教我什麼。 –

回答

1

您需要設置表格的KeyPreview屬性。有了這一套來True,形式將焦點控件之前收到的按鍵事件,如下圖所示:

key preview property

你上面的代碼,然後在表格上任何地方工作。

+0

當我輸入時沒有任何反應。 –

0

除非我完全誤解了你,有幾個方法,你可以關閉這兩種形式,我能想到的是一個的方式來傳遞你的父母形成了你的孩子形式,以便類似:

var pfd = new profFileDialog(this); 
pfd.ShowDialog(); 

在你的孩子形式:

private readonly mnuForm _parentForm; 

public profFileDialog(mnuForm parentForm) 
{ 
    _parentForm = parentForm; 
    KeyPreview = true; // <-- see Simon's Answer 

    // other code ... 
} 

然後,只需關閉兩個:

private void proFileDialog_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     this.Close(); 
     _parentForm.Close(); 
    } 
} 

如果喲ü要關閉整個應用程序(你可能沒有),你可以使用Application.Exit();

private void proFileDialog_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     Application.Exit(); 
    } 
} 

我希望這有助於。

+0

「if(e.KeyCode == Keys.Enter)」在我輸入時不會觸發。如果我切換它使用「結束」鍵它的作品。 –

+0

@MrBeach你可以試試'Keys.Return' –