2010-08-24 49 views
3

我有一個WinForm有3個組框,一個帶有組合框,另外兩個帶有單選按鈕。我將他們和他們的子控件都設置爲「TabStop = false」,但是當我使用TAB循環時,最後兩個組框中每個當前選定的單選按鈕都會聚焦。WinForm - TabStop不工作

如果沒有辦法改變這種行爲,那麼抓住焦點並將焦點移開是一件好事?我無法找到「OnFocus」事件。


解決的辦法是設置一個方法(下面的代碼)來處理表單中的每個單選按鈕的「輸入」事件(如果那是你希望的東西)。

實際上,我只對第一個組框的單選按鈕進行了操作,第二個組框的單選按鈕沒有獲得焦點,即使它們的「Enter」事件沒有處理。這不是你所期望的行爲。

private void radiobuttonXGroup1_Enter(object sender, EventArgs e) 
{ 
    SomeOtherControl.Focus(); 
} 

在*了.Designer.cs文件編輯每輸入事件(每個單選按鈕)爲指向一個事件處理(上面的方法)。

this.radiobutton1Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter); 
this.radiobutton2Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter); 
this.radiobutton3Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter); 
+0

winforms,webforms或wpf? – Robaticus 2010-08-24 19:13:33

+1

@Robaticus,問題始於「我有一個WinForm ...」 – Kashif 2010-08-24 19:18:48

+0

我編輯了這個問題以迴應Robaticus問題。問題是我的瀏覽器不再使用StackOverflow站點。我只能編輯已發佈的問題,但不能發佈新問題或添加評論(現在使用Firefox)。 – OIO 2010-08-24 19:25:19

回答

5

RadioButton.TabStop MSDN文檔「此API支持.NET Framework基礎結構,不適合直接在代碼中使用」。這基本上意味着,「這不會如你所期望的那樣工作」。

就是這樣,當按鈕收到焦點時,Enter事件將會觸發。您可以嘗試使用它將焦點移至其他控件。

+0

是的,幾分鐘前我看到TabStop會工作,它看起來更優雅,而且只有單選按鈕不起作用,其他控件都這樣。 – OIO 2010-08-25 21:22:40

+0

感謝您指出這項工作的正確事件。 – OIO 2010-08-26 03:33:45

5

將RadioButton上的TabStop設置爲False以防止對控件進行切換,直到您實際選擇單選按鈕而沒有像@msergeant建議的任何其他重寫。

EDIT

下面的代碼防止了代碼從得到一個tab鍵事件:

private void radioButton1_CheckedChanged(object sender, EventArgs e) 
{ 
    radioButton1.TabStop = false; 
} 

單選按鈕的行爲不同,在從其他控件相對於標籤它們在集合或組工作基於設置選項卡索引或將單選按鈕放在組框中。

+1

感謝您的信息。我仍然認爲這不是預期的行爲,如果設置爲TabStop = false(就像其他控件一樣),單選按鈕不會將焦點放在TAB按鍵上。 – OIO 2010-08-25 21:32:56

+0

感謝您的評論讓我更加了解您的問題和我的答案。 – Zamboni 2010-08-26 02:52:41

+0

感謝您抽出時間。我比較了這兩個事件,並且「Enter」事件似乎是正確的:「當控件成爲窗體的主動控件時發生。」 vs「每當'checked'屬性更改值時發生。」當用TAB鍵循環播放控件時,單選按鈕的「checked」屬性不會改變,它們只能得到焦點。 – OIO 2010-08-26 03:24:28