9

この問題は、c# .NET、Visual Studio、Windows フォーム アプリケーションで発生します。

1 つのフォームと 1 つのパネルにランダムに配置された多数のチェックボックスがあります。そのため、フォームでいずれかcheckboxが選択されている場合、その値は合計されるはずです。

結論: たくさんの「If-else ループ」を使用する代わりに、チェックされているかどうかを評価します。「for ループ」を使用して単純化したい。

私が使用できるタイプ機能はありCheckbox group nameますか???

次のようなコードを書きたい:

for(int i=0;i<checkboxes.length;i++)
{
    string str;
    if(chkbox.checked)
    {
        str+=chkbox.value;
    }
}

はグループcheckboxes名です。

4

5 に答える 5

11

シンプルな LINQ クエリを使用できます

var checked_boxes = yourControl.Controls.OfType<CheckBox>().Where(c => c.Checked);

yourControlチェックボックスを含むコントロールはどこにありますか。


checked_boxesIEnumerable<CheckBox>クエリを表すを実装するオブジェクトになりました。通常、foreachループを使用してこのクエリを反復処理します。

foreach(CheckBox cbx in checked_boxes) 
{
}

また、 List<Checkbox>checked_boxes.ToList()で、またはWhere(...).


チェックボックスの を単一の文字列に連結したいのでText、 を使用できますString.Join

var checked_texts = yourControl.Controls.OfType<CheckBox>()
                                        .Where(c => c.Checked)
                                        .OrderBy(c => c.Text)
                                        .Select(c => c.Text);

var allCheckedAsString = String.Join("", checked_texts);

OrderByまた、チェックボックスを確実にソートするための句を追加しましたText

于 2012-12-12T08:28:43.840 に答える
1
CheckBox[] box = new CheckBox[4];  

box[0] = checkBox1;  
box[1] = checkBox2;  
box[2] = checkBox3;  
box[3] = checkBox4;

for(int i=0; i<box.length; i++)
{
      string str;
      if(box[i].checked== true)
      {
           str += i.value;
      }
} 

このコードはDotNet4.0で動作すると思います。Plzは、エラーが発生したことを知らせてくれます。'box'を通常の配列として扱います。

于 2012-12-12T08:30:02.727 に答える
0

すべてのチェックボックスを 1 つの CheckedChanged イベント ハンドラーにサブスクライブし、チェックボックスがオンまたはオフになったときに文字列を作成します。次のクエリは、フォームのすべてのチェックボックスの名前を含む文字列を作成します。

private void Checkbox_CheckedChanged(object sender, EventArgs e)
{
    // this will use all checkboxes on Form
    string str = Controls.OfType<CheckBox>()
                         .Where(ch => ch.Checked)
                         .Aggregate(new StringBuilder(),
                                    (sb, ch) => sb.Append(ch.Name),
                                    sb => sb.ToString());
    // use string
}
于 2012-12-12T08:22:54.327 に答える
0

すべてのチェックボックスがグループボックスにある場合、これを行うことができます:

foreach(Control c in myGroupBox.Controls)
  {
   if (c is CheckBox)
    {
    //do something
     CheckBox temp = (CheckBox)c;
     if(temp.Checked)
        //its checked
    }  
  }   
于 2012-12-12T08:23:23.137 に答える
0

イベント CheckedChanged にサブスクライブする以外に、それが何らかのパネルまたはフォームに含まれていても代替手段はないと思います. そうでない場合は使用する必要があります,

それが asp.net や php などの Web ベースである場合は、.each を使用して特定の各イベントをループし、その値を取得するオプションが与えられるため、jquery を使用できます。

于 2012-12-12T08:34:42.853 に答える