2010-03-20 39 views
1

我有一個MDI窗體窗體應用程序,我的子窗體大多都有「確定」和「取消」按鈕。但是我不想用ENTER/ESC鍵激活它們以防止意外的保存/中止。所以,窗體的AcceptButton和CancelButton都設置爲none。 ESC按鈕確實沒有任何作用,但ENTER按鈕仍然通過「點擊」找到的第一個按鈕來關閉窗體,按TabOrder排序。將AcceptButton設置爲None仍然關閉ENTER上的表單

這是爲什麼?我真的應該開始做解決方法並捕獲ENTER鍵嗎?

加:好吧,這是方式怪異的。 Reflector告訴我,如果Tab Order的第一個控件(當然,窗體打開時默認爲活動的控件)是一個按鈕,那麼它將被指定爲默認控件。否則沒有任何反應現在問題變成:WTF?

回答

0

聽起來,OK按鈕是Tab鍵順序中的第一個控件,當窗體加載時它會自動獲得鍵盤焦點,這意味着按Enter鍵將會點擊它。如果您希望鍵盤焦點轉到其他控件,請嘗試將ActiveControl屬性設置爲論壇上的其他元素。

Button okButton = new Button(); 
TextBox someOtherControl = new TextBox(); 

// Add controls to form. 
this.Controls.Add(okButton); 
this.Controls.Add(someOtherControl); 

// Specifically set the ActiveControl on the form. 
this.ActiveControl = someOtherControl; 
+0

不,不是的。即使選擇了另一個控件,ENTER鍵仍然有效。正如我所說 - 它實際上做了窗體的**默認**按鈕(這意味着「用戶按下ENTER時被按下的按鈕」)。 – 2010-03-24 09:43:41

0

Exept所有的設計師將DialogResult屬性,以你的按鈕,並且不清除它們,當你設置的AcceptButton/CancelButton屬性設置爲無。所以,你必須手動執行(在你的代碼或設計器中)。

Button okButton = new Button(); 

// some code here 

okButton.DialogResult = DialogResult.None; 
0

我只是被困在同樣的問題上。很長一段時間沒有使用WinForms,我以爲可以在這麼簡單的事情中錯過什麼嗎?

在我的情況下,我希望「確定」按鈕在一些任務運行時不可見(或禁用),然後出現在最後......因此在開始時只顯示「取消」,並且它始終「接受」!無論我將AcceptButton設置爲「Ok」還是設置爲「None」,並且在表單上出現「Ok」後,仍然在「Enter」上執行「取消」操作。如果兩個按鈕始終可見並啓用 - 這是正確的。那麼......我認爲這是正確的,但現在看完這個之後,我嘗試切換按鈕順序,是的,這是第一個總是「接受」的按鈕。

看來Form.AcceptButton現在已經過時並且未被使用。雖然Form.CancelButton仍在工作。我知道這是它如何在HTML中工作的方式,但在WinForms中......我有同樣的「wtf」問題。 .NET 4.5。

相關問題