2016-07-01 1 views
0

フォームにラジオボタンを動的に作成しています。ユーザーに選択を解除させたいと思います。ユーザーのオプションは1つを選択するか、またはnoneを選択する必要があります(チェックボックスよりもラジオボタンを使用する方が安全です)。私はEventHandlerを使ってイベントを作成しようとしましたが、うまく動作するようになっていません。C#動的に作成されたラジオボタンの選択を解除するにはどうすればよいですか?

private void makeRadioButtons(string size, Panel pnl) 
    { 
     for (int i = 0; i < 2; i++) 
     { 
      RadioButton btn = new RadioButton(); 
      btn.AutoSize = true; 
      btn.Name = i; 
      btn.Text = i; 
      btn.Location = new Point(100*i, 0); 
      btn.Click += new EventHandler(radioHandler); 
      pnl.Controls.Add(btn); 
     } 
} 

そしてここでは、私のイベントハンドラです:私はコンパイルするとき

private void radioHandler(object sender, EventArgs e) 
    { 
     RadioButton rdo = sender as RadioButton; 
     if(rdo.Checked) 
     { 
      rdo.Checked = false; 
     } 
     else 
     { 
      rdo.Checked = true; 
     } 
    } 

私は、ボタンを取得しますが、選択または選択解除することはできません。ここ

は、私は、ボタンを作る持っているものですそれら。私は近くにいるように感じますが、ここで間違っていることを理解できません。

+0

winformsまたはasp.net? –

+0

クリックしたときに自動的にチェックされません( 'pnl.Controls'の他のチェックボックスがオフになっています)? _正確に何をしたいですか?また、 'rdo.Checked =!rdo.Checked; 'を設定するだけで' if'に変換することができることに注意してください。 –

+0

ラジオボタンは、グループ内で1つだけの選択を強制するように設計されています。これがまさにあなたが求めているチェックボックスの機能性である場合、それらを使用する方が安全ですか? –

答えて

0

これは混乱を招くイベントハンドラコードです。

ラジオボタンは、ユーザーがクリックすると自動的にオン/オフされます。

あなたのコードは逆です!ただ、必要とされているハンドラの除去

編集

+0

正しく処理する方法に関するいくつかのコードを提供する必要があります。 –

1

ラジオボタンは、デフォルトで自動的にチェックされます。 AutoCheckプロパティを作成するときにfalseに設定することで、それを回避できます。

その後は、このようなあなたのハンドラを変更する必要があります。

private void radioHandler(object sender, System.EventArgs e) 
{ 
    RadioButton rbt = (RadioButton)sender; 
    if (rbt.Checked) 
    { 
     rbt.Checked = false; 
     return; 
    } 

    rbt.Checked = true; 
    foreach (RadioButton r in pnl.Controls.OfType<RadioButton>()) 
     if (r != rbt) r.Checked = false; 
} 

クリックされたボタンがチェックされたのであれば、それがオフになっています。チェックされていない場合は、チェックして他のチェックボックスをすべてオフにします(AutoCheckfalseに設定しているため、これが必要です)。

+0

これは、何もチェックできないという問題を引き起こしています。 – Chuck

+0

@Chuckそれをデバッグしましたか?私はそれをテストし、それは私のために働く... –

+0

私は私のプログラムに入れて、それを(ビジュアルスタジオを使用して)コンパイルしました。 VSからプログラムを実行すると、そのグループのラジオボタンは選択できません。おそらく私の問題はハンドラのどこかにありますか? – Chuck

関連する問題