2014-05-19 25 views
0

我有一些不同的選項卡,並在選項卡中我有一些單選按鈕。我只需要在選項卡頁面中一次選擇一個單選按鈕。我有以下代碼單選按鈕檢查控件與選項卡頁

private void RadioButtonCheckedChanged(object sender, EventArgs e) 
    { 
     TabControl.TabPageCollection pages = tabControl1.TabPages; 
     var rdoButtonName = sender as RadioButton; 
     foreach (TabPage page in pages) 
     { 
      foreach (Control item in page.Controls) 
      { 
       if (item is RadioButton) 
       { 
        if (rdoButtonName.Name == item.Name) 
        { 
         rdoButtonName.Checked = true; 
        } 
        else 
        { 
         rdoButtonName.Checked = false; 
        } 
       } 
      } 
     } 
    } 

當我去點擊第一個選項卡頁面上的單選按鈕它不會讓我改變自己的身份檢查,但它在其他頁面。任何人都可以看到上面的代碼有什麼問題嗎?

+0

如果您將它們放在組合框或其他容器中,則不必手動處理其「已檢查」狀態。 – etaiso

+0

@etaiso - 看起來他只希望在所有標籤頁中選擇一個單選按鈕 – firedfly

+0

@Inkey - 第一個標籤頁上的單選按鈕是否連線到RadioButtonCheckedChanged處理程序? – firedfly

回答

0

我看到你Cheked值設置爲發送方,而不是其他的單選按鈕...

private void RadioButtonCheckedChanged(object sender, EventArgs e) 
{ 
    TabControl.TabPageCollection pages = tabControl1.TabPages; 
    var rdoButtonName = sender as RadioButton; 
    foreach (TabPage page in pages) 
    { 
     foreach (Control item in page.Controls) 
     { 
      if (item is RadioButton) 
      { 
       if (item.Name != rdoButtonName.Name) 
       { 
        item.Checked = false; 
       } 

      } 
     } 
    } 
} 
0

我認爲(更好的調試和檢查),你的問題是,每次你改變一個你RadioButton狀態它會再次調用這個函數並且會產生意想不到的結果。

爲了解決這個問題我會分離,並改變Checked狀態,像在此之前重新連接您的事件處理程序:

private void RadioButtonCheckedChanged(object sender, EventArgs e) 
    { 
     TabControl.TabPageCollection pages = tabControl1.TabPages; 
     var rdoButtonName = sender as RadioButton; 
     foreach (TabPage page in pages) 
     { 
      foreach (Control item in page.Controls) 
      { 
       if (item is RadioButton) 
       { 
        rdoButtonName.CheckedChanged -= new System.EventHandler(this.RadioButtonCheckedChanged); 

        if (rdoButtonName.Name == item.Name) 
        { 
         rdoButtonName.Checked = true; 
        } 
        else 
        { 
         rdoButtonName.Checked = false; 
        } 

        rdoButtonName.CheckedChanged += new System.EventHandler(this.RadioButtonCheckedChanged); 
       } 
      } 
     } 
    } 
+0

不適用於當我調試它擊中rdoButtonName.Checked = true;然後它似乎取消選中它 – Inkey

0

的問題是,「的CheckedChanged」 -event不能在此使用這種情況,這就是問題所在。關鍵是要使用另一個事件 - 「點擊」

private void radioButton_Click(object sender, EventArgs e) 
    { 
     foreach (TabPage page in tabControl1.TabPages) 
     { 
      foreach (RadioButton radioButton in page.Controls) 
      { 
       if (radioButton != (RadioButton)sender) { radioButton.Checked = false; } 
      } 
     } 
    } 

更改單選按鈕在使用這種方法「點擊」 -event,它會工作。我自己測試了它。