c#.NET,Visual Studio,Windows窗体应用程序
面临问题我在一个表单和一个面板中随机放置了一堆复选框。
因此,如果在表单中选择了任何checkbox
,则应该将其值相加。
底线:不是使用大量的“If-else循环”来评估是否已经检查过。我想用“for循环”来简化它。
是否有Checkbox group name
类型功能,我可以使用???
我想要这样的代码:
for(int i=0;i<checkboxes.length;i++)
{
string str;
if(chkbox.checked)
{
str+=chkbox.value;
}
}
checkboxes
是组名。
答案 0 :(得分:7)
您可以使用简单的LINQ查询
var checked_boxes = yourControl.Controls.OfType<CheckBox>().Where(c => c.Checked);
其中yourControl
是包含复选框的控件。
checked_boxes
现在是一个实现表示查询的IEnumerable<CheckBox>
的对象。通常,您希望使用foreach
循环遍历此查询:
foreach(CheckBox cbx in checked_boxes)
{
}
您也可以通过调用List<Checkbox>
将此查询转换为列表(.ToList()
),可以在checked_boxes上或直接在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
排序。
答案 1 :(得分: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'视为常规数组。
答案 2 :(得分:0)
将所有复选框订阅到一个CheckedChanged事件处理程序,并在选中或取消选中任何复选框时构建字符串。以下查询将构建字符串,其中包含所有Form的已选中复选框的名称:
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
}
答案 3 :(得分:0)
如果所有复选框都在分组框中,您可以执行以下操作:
foreach(Control c in myGroupBox.Controls)
{
if (c is CheckBox)
{
//do something
CheckBox temp = (CheckBox)c;
if(temp.Checked)
//its checked
}
}
答案 4 :(得分:0)
我认为除了订阅事件CheckedChanged之外,即使它包含在某些面板或表单中,也没有其他选择,你必须使用if else,
如果它本来是web基础,例如asp.net或php我们可以使用jquery,因为它让我们可以选择使用.each循环每个特定事件并获取其值