保存复选框C#
嗨,我有一个表格,我正在做的人可以检查框,看看哪些项目,他们已经阅读。如何保存复选框而不必对每个复选框进行大量循环?(总共有66个框)。您无法序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后反序列化它以重建表单。不能序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后将其反序列化以重建表单。您可以使用Linq优雅地循环检查复选框:保存复选框C#,c#,forms,C#,Forms,嗨,我有一个表格,我正在做的人可以检查框,看看哪些项目,他们已经阅读。如何保存复选框而不必对每个复选框进行大量循环?(总共有66个框)。您无法序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后反序列化它以重建表单。不能序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后将其反序列化以重建表单。您可以使用Linq优雅地循环检查复选框: var checkBoxes = Controls.OfType<CheckBox>(); foreac
var checkBoxes = Controls.OfType<CheckBox>();
foreach (var chk in checkBoxes)
{
// Save state
}
可能看起来像这样:
Dictionary<string, bool> state = new Dictionary<string, bool>();
var checkBoxes = Controls.OfType<CheckBox>();
foreach (var chk in checkBoxes)
{
if (!state.ContainsKey(chk.Name))
{
state.Add(chk.Name, chk.Checked);
}
else
{
state[chk.Name] = chk.Checked;
}
}
字典状态=新建字典();
var复选框=Controls.OfType();
foreach(复选框中的var chk)
{
如果(!state.ContainsKey(chk.Name))
{
state.Add(chk.Name,chk.Checked);
}
其他的
{
状态[chk.Name]=chk.Checked;
}
}
然后,只需使用您最喜欢的支持通用词典的序列化程序对状态进行序列化。您可以使用Linq优雅地循环检查复选框:
var checkBoxes = Controls.OfType<CheckBox>();
foreach (var chk in checkBoxes)
{
// Save state
}
可能看起来像这样:
Dictionary<string, bool> state = new Dictionary<string, bool>();
var checkBoxes = Controls.OfType<CheckBox>();
foreach (var chk in checkBoxes)
{
if (!state.ContainsKey(chk.Name))
{
state.Add(chk.Name, chk.Checked);
}
else
{
state[chk.Name] = chk.Checked;
}
}
字典状态=新建字典();
var复选框=Controls.OfType();
foreach(复选框中的var chk)
{
如果(!state.ContainsKey(chk.Name))
{
state.Add(chk.Name,chk.Checked);
}
其他的
{
状态[chk.Name]=chk.Checked;
}
}
然后,只需使用您最喜欢的支持泛型词典的序列化程序序列化state
。您可以使用。通过使用该属性,您只能获取选中的项
private void WhatIsChecked_Click(object sender, System.EventArgs e) {
// Display in a message box all the items that are checked.
// First show the index and check state of all selected items.
foreach(int indexChecked in checkedListBox1.CheckedIndices) {
// The indexChecked variable contains the index of the item.
MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" +
checkedListBox1.GetItemCheckState(indexChecked).ToString() + ".");
}
// Next show the object title and check state for each item selected.
foreach(object itemChecked in checkedListBox1.CheckedItems) {
// Use the IndexOf method to get the index of an item.
MessageBox.Show("Item with title: \"" + itemChecked.ToString() +
"\", is checked. Checked state is: " +
checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
}
}
你可以用。通过使用该属性,您只能获取选中的项
private void WhatIsChecked_Click(object sender, System.EventArgs e) {
// Display in a message box all the items that are checked.
// First show the index and check state of all selected items.
foreach(int indexChecked in checkedListBox1.CheckedIndices) {
// The indexChecked variable contains the index of the item.
MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" +
checkedListBox1.GetItemCheckState(indexChecked).ToString() + ".");
}
// Next show the object title and check state for each item selected.
foreach(object itemChecked in checkedListBox1.CheckedItems) {
// Use the IndexOf method to get the index of an item.
MessageBox.Show("Item with title: \"" + itemChecked.ToString() +
"\", is checked. Checked state is: " +
checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
}
}
充实我的评论,假设所有的复选框都在一个控件(窗体或面板)上,我称之为“父控件”
foreach (CheckBox child in parent.Controls)
{
if (child == null) // Skip children that are not Checkboxes
continue;
// Save the child Checkbox
}
充实我的评论,假设所有的复选框都在一个控件(窗体或面板)上,我称之为“父控件”
foreach (CheckBox child in parent.Controls)
{
if (child == null) // Skip children that are not Checkboxes
continue;
// Save the child Checkbox
}
您可以处理复选框的
CheckedChanged
事件,并相应地更新本地变量(或列表)。这样,您将始终知道每个复选框的CheckState
,而不必每次都进行迭代
CheckBox box = new CheckBox();
box.CheckedChanged += new EventHandler(box_CheckedChanged);
// Event Handler
void box_CheckedChanged(object sender, EventArgs e)
{
if (sender is CheckBox)
{
CheckBox cb = (CheckBox)sender;
bool checkState = cb.Checked;
}
}
希望它能帮助 您可以处理复选框的
CheckedChanged
事件,并相应地更新本地变量(或列表)。这样,您将始终知道每个复选框的CheckState
,而不必每次都进行迭代
CheckBox box = new CheckBox();
box.CheckedChanged += new EventHandler(box_CheckedChanged);
// Event Handler
void box_CheckedChanged(object sender, EventArgs e)
{
if (sender is CheckBox)
{
CheckBox cb = (CheckBox)sender;
bool checkState = cb.Checked;
}
}
希望它能帮助 做一个
foreach(parent.Controls中的CheckBox child)
并为每个不为null的对象做一些事情。我搞砸了…问题是我不知道如何为每个不为null的对象“做一些事情”。我的想法是将复选框发送到txt文件的列表中,然后在formload上读取文件并选中上一个会话中选中的复选框。不确定这是否是最明智的想法。对每个不为空的对象执行操作(parent.Controls中的CheckBox child)
,并对每个不为空的对象执行某些操作。我把它弄得一团糟……问题是我不知道如何对每个不为空的对象“执行某些操作”。我的想法是将复选框发送到txt文件的列表中,然后在formload上读取文件并选中上一个会话中选中的复选框。不确定这是不是最聪明的主意。你也可以做parent.Controls.OfType()
No used singular checkbox…比如checkBox1、checkBox2等等。我没有使用复选框列表。实际上我现在刚刚读到了。你也可以做parent.Controls.OfType()
No used singular checkbox…比如checkBox1、checkBox2等等。我没有使用复选框列表。事实上,我现在刚刚读到这方面的内容。使用我编写的字典扩展方法AddOrSet(key,value)
,它甚至更好。移动if
语句以查看字典是否已将键放入扩展方法中。好的,到目前为止,我正在尝试使用您的代码:List-box=new-List();var-checkbox=Controls.OfType();foreach(框中的字符串s){foreach(var-chk-in-checkbox){if(s==chk.Name){chk.Checked=true;}}}}var checkBoxes=Controls.OfType();foreach(var chk in checkBoxes){boxes.Add(chk.Name);}
使用我编写的字典扩展方法,它甚至更好一些。AddOrSet(key,value)
。移动if
语句,查看字典是否已经在扩展方法中使用了键。好的,我正在试着使用您的代码:List box=new List();var checkbox=Controls.OfType();foreach(框中的字符串s){foreach(复选框中的var chk){if(s==chk.Name){chk.Checked=true;}}}}}var复选框=Controls.OfType();foreach(var chk在复选框中){box.Add(chk.Name);}