2011-08-11 64 views
4

我在我的Windows Forms項目中有很多動態生成的單選按鈕。可以根據數據庫中的值檢查它們。我想清除單擊按鈕中的所有單選按鈕。我怎樣才能做到這一點?清除頁面中的所有單選按鈕

+0

我確定有一些有效的方法可以用JQuery來做到這一點。雖然不是一個專家,但一個快速的谷歌可以提供我想的一些結果。 –

+1

@Joachim - 他正在使用WinForms。 – gangelo

+1

循環遍歷所有控件並檢查它們的類型。然後刪除它們是否是單選按鈕。 – 2011-08-11 12:25:21

回答

7

檢查:。

private void button1_Click(object sender, EventArgs e) 
{ 
    var cntls = GetAll(this, typeof(RadioButton)); 
    foreach (Control cntrl in cntls) 
    { 
     RadioButton _rb = (RadioButton)cntrl; 
     if (_rb.Checked) 
     { 
      _rb.Checked = false; 
     } 
    } 
} 

public IEnumerable<Control> GetAll(Control control, Type type) 
{ 
    var controls = control.Controls.Cast<Control>(); 
    return controls.SelectMany(ctrls => GetAll(ctrls, type)).Concat(controls).Where(c => c.GetType() == type); 
} 
5

只要_radioContainer是一個GroupBox,兩者都會在下面執行。

private void button1_Click(object sender, EventArgs e) { 

    // This will remove the radiobuttons completely... 
    _radioContainer.Controls.OfType<RadioButton>().ToList().ForEach(p => _radioContainer.Controls.Remove(p)); 

    // Either of the below will clear the checked state 
    _radioContainer.Controls.OfType<RadioButton>().ToList().ForEach(p => p.Checked = false); 

    foreach (RadioButton radio in _radioContainer.Controls.OfType<RadioButton>().ToList()) { 
     if (radio.Checked == true) { 
      radio.Checked = false; 
      break; 
     } 
    } 
} 
+0

如果您的單選按鈕跨越多個分組框,則可以使用「OfType」擴展名先搜索分組框,然後搜索每個分組框中的單選按鈕。 – gangelo

1

我不知道這是否是這種情況,但是您可能有單選按鈕嵌套在其他控件中。如果是這種情況,您需要瀏覽所有控件的所有.Controls集合,以便找到所有控件並將其關閉。你可以使用這個輔助函數來做到這一點:

void ExecuteOnAllChildren<U>(Control c, Action<Control> T) where U : Control 
    { 
     c.Controls.OfType<U>().ToList().ForEach(a => T(a)); 

     foreach(Control childControl in c.Controls) 
      ExecuteOnAllChildren<U>(childControl, T); 

    } 

說使用它:

ExecuteOnAllChildren<RadioButton>(this, a => { a.Checked = false; }); 

(我假設「本」是你的表,否則將「這一」與形式,你會喜歡做的所有的內容替換用)

0
void Button1Click(object sender, EventArgs e) 
{ 
    foreach (Control ctrl in Controls) 
    { 
     if (ctrl is Panel) 
     { 
      foreach (Control rdb in ctrl.Controls) 
      { 
       if (rdb is RadioButton && ((RadioButton)rdb).Checked == true) 
       { 
        ((RadioButton)rdb).Checked = false; 
       } 
      } 
     } 
    } 
} 

這將清除單擊按鈕上的所有選中的單選按鈕。

0

我遇到了類似的問題,其中沒有任何其他答案是有用的。

我想用2個Radiobutton初始化一個Winform對話框,它應該是未選中的。用戶必須做出明確的選擇,然後才能選擇某些內容(如在此問題中:https://ux.stackexchange.com/questions/76181/radio-buttons-with-none-selected)。

問題是:第一個RadioButton(低於TabIndex的那個)總是被預先檢查過。手動取消選中一個,只檢查另一個(不管是在構造函數中還是在Load事件中)。

解決方法:爲RadioButtons設置TabStop屬性爲false。不過,不要問我爲什麼。