C# 使用列表保存多个复选框的状态
我正在制作一个应用程序来存储用户通过表单输入的数据。因为我在多个页面上有很多复选框和表单延伸。我想保存这些复选框的状态,这样当我转到下一页并返回时,以前选中的复选框应该被选中。 我试图通过使用C# 使用列表保存多个复选框的状态,c#,winforms,C#,Winforms,我正在制作一个应用程序来存储用户通过表单输入的数据。因为我在多个页面上有很多复选框和表单延伸。我想保存这些复选框的状态,这样当我转到下一页并返回时,以前选中的复选框应该被选中。 我试图通过使用List和bool[]来实现这一点。但由于某些原因,它就是不起作用。我不知道我错过了什么 public void Ucitavanje34(bool[] Lista,List<CheckBox> check ) { foreach (CheckBox ajtem in c
List
和bool[]
来实现这一点。但由于某些原因,它就是不起作用。我不知道我错过了什么
public void Ucitavanje34(bool[] Lista,List<CheckBox> check )
{
foreach (CheckBox ajtem in check)
{
int i = 0;
if (ajtem.Checked==true)
{
Lista[i] = true;
++i;
}
else
{
Lista[i]= false;
++i;
}
}
MessageBox.Show(string.Join(Environment.NewLine,Checkboxstrana3,boolarray ));
}
public void Ucitavanje43(bool[] Lista, List<CheckBox> check)
{
foreach (bool ajtem in Lista)
{
int i = 0;
if (ajtem == true)
{
check[i].Checked = true;
++i;
}
else
{
check[i].Checked = false;
++i;
}
}
MessageBox.Show(string.Join(Environment.NewLine,Stanje));
}
public void Ucitavanje34(bool[]Lista,列表检查)
{
foreach(复选框中的ajtem)
{
int i=0;
如果(ajtem.Checked==true)
{
Lista[i]=真;
++一,;
}
其他的
{
Lista[i]=假;
++一,;
}
}
Show(string.Join(Environment.NewLine,Checkboxstrana3,boolarray));
}
公共无效Ucitavanje43(布尔[]列表,列表检查)
{
foreach(列表中的bool ajtem)
{
int i=0;
如果(ajtem==true)
{
选中[i]。选中=真;
++一,;
}
其他的
{
check[i]。Checked=false;
++一,;
}
}
Show(string.Join(Environment.NewLine,Stanje));
}
我知道我可以手动操作(1by1),但这太麻烦了
我得到的输出很愚蠢,我不知道我做错了什么。您正在为每个复选框将
i
重置为零。最好使用单个for循环,并对列表
和bool[]
上的索引使用i
,因为您的问题在for循环中
你正在做int i=0;在forloop内部。这将始终从列表中获取第一个元素
public void Ucitavanje34(bool[] Lista,List<CheckBox> check )
{
int i = 0; //this line
foreach (CheckBox ajtem in check)
{
Lista[i] = ajtem.Checked;
++i;
}
MessageBox.Show(string.Join(Environment.NewLine,Checkboxstrana3,boolarray ));
}
public void Ucitavanje34(bool[]Lista,列表检查)
{
int i=0;//这一行
foreach(复选框中的ajtem)
{
Lista[i]=已检查的项目;
++一,;
}
Show(string.Join(Environment.NewLine,Checkboxstrana3,boolarray));
}
其他答案已经指出了您的问题,我只是想提供一种不同的方法,因为您的任务是一个很好的示例,您可以从使用LINQ中获益
bool[] Lista = check.Select(x => x.IsChecked).ToArray();
如果您对此感兴趣,请参阅
public Dictionary<string, bool> Save(params CheckBox[] check)
{
Dictionary<string, bool> result = new Dictionary<string, bool>();
foreach (CheckBox item in check)
result.Add(item.Name, item.Checked);
return result;
}
public void Apply(Dictionary<string, bool> savedResults)
{
foreach (var item in savedResults)
{
var check = this.Controls[item.Key];
// var check = this.Controls.Find(item.Key, true).FirstOrDefault(); //easier way to find checkboxes
if(check != null && check.GetType().ToString() == "System.Windows.Forms.CheckBox")
{
((CheckBox)check).Checked = item.Value;
}
}
}
现在,将结果保存到所需的任何位置
如何使用它:
result = Save(checkBox1, checkBox2, checkBox3, checkBox4);
Dictionary<string, bool> result = ... // Load from somewhere
Apply(result);
字典结果=…//从某处装载
应用(结果);
使用字典?这是一个常规编程错误,可以通过调试修复。。另请参阅已接受的答案,了解简化方法,如果您只有几个静态复选框,该方法可能有效。您刚才建议在注释中使用字典。我相信这是存储状态的好方法,但我不知道如何将复选框
存储为键(键应该是唯一的),您可以使用控件名称作为键。Dictionary@CodeNameJack好的,我已经修好了,但仍然不起作用。我会用字典试试。另外,如果其他部分不起作用的话,你不需要那个。您只需分配