2012-03-15 17 views
0

すべては、私は複数のコントロール(Button秒、RadioButton Sなど)とのGroupBoxを持っていると私はGroupBoxRadioButtonがチェックしている確立の最もefficent方法を知りたいです状態。私は現在、私は、私は必要があるボタンを確立するために列挙子を使用最適化された検索

int nCheckedRadioIdx = 0; 
foreach (Control ctrl in groupBoxList.Controls) 
{ 
    if (ctrl.GetType() == typeof(RadioButton)) 
    { 
     if (((RadioButton)ctrl).Checked) 
     { 
      switch (((RadioButton)ctrl).Name) 
      { 
       case "radioButtonGoodCodeSumm": 
        nCheckedRadioIdx = 0; 
        break; 
       case "radioButtonBadCodeSumm": 
        nCheckedRadioIdx = 1; 
        break; 
       case "radioButtonBadByEpiNo": 
        nCheckedRadioIdx = 2; 
        break; 
       case "radioButtonValidCodes": 
        nCheckedRadioIdx = 3; 
        break; 
       default: 
        break; 
      } 
      break; 
     } 
    } 
} 

を持っています。これは私にとって非常に冗長であるようです(実際は醜いです!)。私はこれをVBで何らかのLINQクエリ(SO Question)で実行したのを見ましたが、私はVBやLINQで作業したことがなく、変換に苦労しています。可能であれば、にはRadioButtonのかなりの数が含まれていますので、これはさらに良い方法があればLINQを使いたいと思いますか?

+3

C位へのVB.NETコードの直接変換は次のようになるであろう: 'のRadioButton rButton = GroupBox1.Controls.OfType .Where(R => r.Checked == TRUE).FirstOrDefault(); ' –

+0

ありがとうございます。しかし、この翻訳はあまり働いていません... – MoonKnight

答えて

2

ラジオボタンごとに、同上イベントハンドラがあり、ボタンがオンになっている場合、GroupBoxのTagプロパティをRadioButtonのTagに設定するとします。設計時には、RadioButtonのタグをあなたの欲しいenum値に設定します。チェックされたボタンを取得したいときは、GroupBox内のすべてのコントロールをチェックするためにループ(エレガントまたはそれ以下)を通過することなくTagプロパティを読み取るだけです。例えば

private void RadioButton_Checked(oject sender, EventArgs e) 
{ 
    RadioButton radio = ((RadioButton)sender); 
    if(radio.Checked) 
     groupBoxList.Tag = radio.Tag; 
} 

もちろんこれは、効率的になりますが、あなたはこの列挙の変更の変化が作成されますので、問題だけでなく、文書にしてくださいする必要があります。

+0

+1ありがとう良いアイデア。私はLINQを使用したいと思います。それの楽しみのために! :] – MoonKnight

+0

@Killercam、私はLINQも好きですが、この場合は非効率なようです。 – Steve

+0

すべての 'RadioButton'に対してこのイベントハンドラを追加しています。ここでの取引は何ですか?あなたの時間をありがとう... – MoonKnight

1
foreach (var control in groupBox3.Controls) 
{     
    RadioButton radio = control as RadioButton; 

    if (radio != null && radio.Checked) 
    { 
     var a = radio.Name; //it gives the name of radio button is checked 
    } 
} 
関連する問題