C# 从字符串中填充复选框数组名称
我试图用从字符串派生的复选框名称填充复选框数组。我想替换以下代码:C# 从字符串中填充复选框数组名称,c#,arrays,string,checkbox,C#,Arrays,String,Checkbox,我试图用从字符串派生的复选框名称填充复选框数组。我想替换以下代码: public void CheckBox_1() { CheckBox[] boxes_1 = new CheckBox[4]; boxes_1[0] = A0; boxes_1[1] = A1; boxes_1[2] = A2; boxes_1[3] = A3; for (int i = 0;i < 4;i
public void CheckBox_1()
{
CheckBox[] boxes_1 = new CheckBox[4];
boxes_1[0] = A0;
boxes_1[1] = A1;
boxes_1[2] = A2;
boxes_1[3] = A3;
for (int i = 0;i < 4;i++)
{
boxes_1[i].Enabled = checkBox1.Checked == true ? true : false;
}
}
public void复选框_1()
{
复选框[]框1=新复选框[4];
框_1[0]=A0;
框_1[1]=A1;
框_1[2]=A2;
方框1[3]=A3;
对于(int i=0;i<4;i++)
{
框_1[i].Enabled=checkBox1.Checked==true?true:false;
}
}
比如说:
public void CheckBox_1()
{
CheckBox[] boxes_1 = new CheckBox[4];
for (int i = 0; i < 4; i++)
{
boxes_1[i] = ("A" + i);
}
for (int i = 0; i < 4; i++)
{
boxes_1[i].Enabled = checkBox1.Checked == true ? true : false;
}
}
public void复选框_1()
{
复选框[]框1=新复选框[4];
对于(int i=0;i<4;i++)
{
方框1[i]=(“A”+i);
}
对于(int i=0;i<4;i++)
{
框_1[i].Enabled=checkBox1.Checked==true?true:false;
}
}
我可以很容易地将复选框名称设置为字符串,但不清楚如何实现这一点。谢谢。您可以使用包含对象的,通过of type
获取所有复选框
控件,然后过滤以“A”开头的名称
var container=…带有复选框的控件。。。;
foreach(container.Controls.OfType()中的var cb,其中(c=>c.Name.StartsWith(“A”))
{
cb.Enabled=checkBox1.Checked;
}
您可以使用包含对象的,通过类型的获取所有复选框控件,然后对以“A”开头的名称进行筛选
var container=…带有复选框的控件。。。;
foreach(container.Controls.OfType()中的var cb,其中(c=>c.Name.StartsWith(“A”))
{
cb.Enabled=checkBox1.Checked;
}
我建议将容器控件中的相关复选框分组,如GroupBox
,而不是仅仅为了创建容易出错且难以理解的代码而对反射进行处理
这样就很容易理解了:
// consider renaming
public void CheckBox_1()
{
var relatedCheckBoxes = GroupBox1.Controls.OfType<CheckBox>();
foreach (var chk in relatedCheckBoxes)
chk.Enabled = checkBox1.Checked; // you might want to pass this checkbox as argument instead
}
<代码> /考虑重命名
公共无效复选框_1()
{
var relatedcheckbox=GroupBox1.Controls.OfType();
foreach(相关复选框中的var chk)
chk.Enabled=checkBox1.Checked;//您可能希望将此复选框作为参数传递
}
我建议将容器控件中的相关复选框分组,如GroupBox
,而不是仅仅为了创建容易出错且难以理解的代码而对反射进行处理
这样就很容易理解了:
// consider renaming
public void CheckBox_1()
{
var relatedCheckBoxes = GroupBox1.Controls.OfType<CheckBox>();
foreach (var chk in relatedCheckBoxes)
chk.Enabled = checkBox1.Checked; // you might want to pass this checkbox as argument instead
}
<代码> /考虑重命名
公共无效复选框_1()
{
var relatedcheckbox=GroupBox1.Controls.OfType();
foreach(相关复选框中的var chk)
chk.Enabled=checkBox1.Checked;//您可能希望将此复选框作为参数传递
}
假设复选框可以嵌套在某个公共容器内的其他控件中,这可能会起作用:
private void CheckBox_1()
{
foreach (var checkbox in FindChildren<CheckBox>(container, c => c.Name.StartsWith("A")))
{
checkbox.Enabled = checkBox1.Checked == true ? true : false;
}
}
public static IEnumerable<T> FindChildren<T>(Control parent, Func<T, bool> filter)
where T : Control
{
var search = new Stack<Control>();
search.Push(parent);
while (search.Count > 0)
{
parent = search.Pop();
foreach (Control child in parent.Controls)
{
T typed = child as T;
if (typed != null && filter(typed))
{
yield return typed;
continue;
}
search.Push(child);
}
}
}
private void复选框_1()
{
foreach(FindChildren(container,c=>c.Name.StartsWith(“A”))中的var复选框)
{
checkbox.Enabled=checkBox1.Checked==true?true:false;
}
}
公共静态IEnumerable FindChildren(控件父级、函数筛选器)
其中T:控制
{
var search=新堆栈();
搜索。推送(父级);
而(search.Count>0)
{
parent=search.Pop();
foreach(父控件中的控件子控件)
{
T类型=作为T的子对象;
if(类型化!=null&&filter(类型化))
{
收益型;
继续;
}
搜索、推送(儿童);
}
}
}
假设复选框可以嵌套在某个公共容器内的其他控件中,这可能会起作用:
private void CheckBox_1()
{
foreach (var checkbox in FindChildren<CheckBox>(container, c => c.Name.StartsWith("A")))
{
checkbox.Enabled = checkBox1.Checked == true ? true : false;
}
}
public static IEnumerable<T> FindChildren<T>(Control parent, Func<T, bool> filter)
where T : Control
{
var search = new Stack<Control>();
search.Push(parent);
while (search.Count > 0)
{
parent = search.Pop();
foreach (Control child in parent.Controls)
{
T typed = child as T;
if (typed != null && filter(typed))
{
yield return typed;
continue;
}
search.Push(child);
}
}
}
private void复选框_1()
{
foreach(FindChildren(container,c=>c.Name.StartsWith(“A”))中的var复选框)
{
checkbox.Enabled=checkBox1.Checked==true?true:false;
}
}
公共静态IEnumerable FindChildren(控件父级、函数筛选器)
其中T:控制
{
var search=新堆栈();
搜索。推送(父级);
而(search.Count>0)
{
parent=search.Pop();
foreach(父控件中的控件子控件)
{
T类型=作为T的子对象;
if(类型化!=null&&filter(类型化))
{
收益型;
继续;
}
搜索、推送(儿童);
}
}
}
将复选框放在列表中会更好。你这样做需要反思。你可以用反思。。。。但你应该澄清你的最终目标。也许我们可以提供更好的方法来完成这项工作。相关的复选框是否以某种方式组合在一起(f.e.GroupBox)?“Box_1[i]。Enabled=checkBox1.Checked==true?true:false;”因此如果true为true,则返回true。。。或者,如果false不是true,则返回false?是否有理由使用三元if?将复选框放入列表中会更好。你这样做需要反思。你可以用反思。。。。但你应该澄清你的最终目标。也许我们可以提供更好的方法来完成这项工作。相关的复选框是否以某种方式组合在一起(f.e.GroupBox)?“Box_1[i]。Enabled=checkBox1.Checked==true?true:false;”因此如果true为true,则返回true。。。或者,如果false不是true,则返回false?三元假设的原因是什么?