2011-04-04 70 views
3

我在Winforms中構建Dialog。它有兩個確定和取消按鈕,當你創建它時,這就是我想要的。在這個對話框中,我也有一個TextBox和一個Sub(在VB.NET中編碼)來處理它的KeyPress事件。當按下「Enter」鍵時,我需要發生的事情。確定取消對話框:處理「輸入」鍵按

現在,我已經完成了這樣的KeyPress處理次數和次數。但是,這種情況是不同的,因爲只要按下「Enter」鍵,對話框就會自動假定您按下「確定」按鈕,返回結果並關閉。在運行應用程序時,在設計器和實際表單中,確定按鈕都是高亮顯示的,這意味着在任何時候都有某種焦點(缺少更好的術語)。我如何禁用對話框的這個功能?當我調試我的代碼時,按Enter鍵甚至沒有進入處理KeyPress事件的子。它只是關閉對話框並返回結果,因此我無法逐步瀏覽代碼並查看幕後發生的情況。

要重申這個問題,我該如何禁用此功能?

乾杯! =)

回答

3

這是它應該工作的方式。您應該將窗體的AcceptButton屬性設置爲確定按鈕。它獲取胖邊框以指示它是默認按鈕,當用戶按Enter鍵時,Click事件會自動運行。如果您將該按鈕的DialogResult屬性設置爲OK,那麼它也會自動分配DialogResult屬性,以便對話框關閉。

不要修復它。如果你想調試它,然後在按鈕的Click事件處理程序上設置一箇中斷。如果您想阻止它關閉,請重置按鈕的DialogResult屬性或將窗體的DialogResult屬性重新設置爲None。永遠不要使用KeyPressed事件。

+1

如果你想在文本框獲得,當你按回車換行符,那麼AcceptsReturn屬性設置爲true爲Textbox。現在,當您在文本框中按Enter時,對話框將不會關閉。 – tolsen64 2016-09-07 15:14:30

5

在設計視圖中檢查窗體的屬性,確保沒有爲AcceptButton設置任何屬性。

1

答案2的竅門!

沒有需要在default OK_Button_Click sub

改變剛剛作出了一個子來處理輸入值的變化 - 在我的情況,這是一個數字輸入:

Private Sub SetKey_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetKey.ValueChanged 

     'Form1 do stuff 

End Sub 

我加入這個代碼將焦點轉移到確定按鈕。因此,它已準備好接受再次進入並完成對話框中,如果用戶想要完成 - 可選:

Private Sub frmMain_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress 

    If e.KeyChar = Chr(Keys.Enter) Then OK_Button.Focus() 

End Sub