2011-08-11 1 views
4

Windows Formsプロジェクトには、多くの動的に生成されたラジオボタンがあります。それらは、データベースの値に基づいてチェックすることができます。ボタンのクリックですべてのラジオボタンをクリアしたい。どうやってやるの?ページ内のすべてのラジオボタンをクリアする

+0

JQueryでこれを行う効率的な方法があると確信しています。しかし、専門家ではないが、私は思ういくつかの結果をもたらすことができる迅速なGoogle。 –

+1

@Joachim - 彼はWinFormsを使用しています。 – gangelo

+1

すべてのコントロールをループし、そのタイプをチェックします。ラジオボタンであれば削除してください。 –

答えて

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

このような場合はわかりませんが、ラジオボタンが他のコントロール内にネストされている可能性があります。そのような場合は、すべてのコントロールのコレクションをすべて調べ、すべてのコントロールを見つけてそれらをオフにする必要があります。あなたはそれを行うには、このヘルパー関数を使用することができます。

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

同様の問題が発生しましたが、これらの回答は役に立ちませんでした。

Winformダイアログを2つのラジオボタンで初期化したかったので、両方をチェックしないでください。ユーザーは何かが選択される前に(この質問のように:https://ux.stackexchange.com/questions/76181/radio-buttons-with-none-selected)明示的に選択する必要があります。

問題:最初のラジオボタン(下位のラジオボタンはTabIndex)が常に事前にチェックされていました。手作業でチェックを外して、コンストラクタかLoadイベントかどうかにかかわらず、もう一方をチェックしてください。

解像度:TabStopプロパティを両方ともRadioButtonsにfalseに設定します。なぜ私に尋ねないでください。

関連する問題