web-dev-qa-db-ja.com

どのラジオボタンがチェックされているかをグループボックスから取得するにはどうすればよいですか?

これらのグループボックスがあります:

Enter image description here

私はラジオボタンのチェックされた真の状態に従っていくつかのコードを実行したい:

string chk = radiobutton.nme; // Name of radio button whose checked is true
switch(chk)
{
    case "Option1":
        // Some code
        break;

    case "Option2":
        // Some code
        break;

    case "Option3":
        // Some code
        break;
}

チェックされたラジオボタンの名前しか取得できないようにする直接的な方法はありますか?

14
Co. Aden

次のようなすべてのチェックされたRadioButtonsを見つけることができます

var buttons = this.Controls.OfType<RadioButton>()
                           .FirstOrDefault(n => n.Checked);

CheckedChanged eventもご覧ください。

Checkedプロパティの値が変更されたときに発生します。

33
Soner Gönül

CheckedChangedイベントを見て、対応するイベントハンドラーを登録し、Checkedラジオボタンの状態を変数に保存する必要があります。ただし、ループのコストを許容できるいくつかのRadioButtonsがあるため、ここでは [〜#〜] linq [〜#〜] を使用したいと思います。

var checkedRadio = new []{groupBox1, groupBox2}
                   .SelectMany(g=>g.Controls.OfType<RadioButton>()
                                            .Where(r=>r.Checked))
// Print name
foreach(var c in checkedRadio)
   System.Diagnostics.Debug.Print(c.Name);
4
King King

すべてのRadioButtonsをチェックするのではなく、GroupBoxのValidatedイベントを使用します。

private void grpBox_Validated(object sender, EventArgs e)
    {
        GroupBox g = sender as GroupBox;
        var a = from RadioButton r in g.Controls where r.Checked == true select r.Name;
        strchecked = a.First();
     }
0