嗨我有一张表格,我正在制作一个人可以复选框以查看他们已经阅读过的内容。如何保存复选框而不通过每个复选框的大量循环? (总共有66个盒子。)
答案 0 :(得分:2)
您可以使用Linq优雅地循环选中复选框:
var checkBoxes = Controls.OfType<CheckBox>();
foreach (var chk in checkBoxes)
{
// Save state
}
保存状态的一种简单方法是使用控件名称作为键将已检查状态置于Dictionary<string, bool>
中。将字典序列化为文件。
所以,
// 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;
}
}
然后,只需使用您喜欢的支持通用词典的序列化程序序列化state
。
答案 1 :(得分:2)
充实我所做的评论,假设所有复选框都在一个控件(Form或Panel)上,我称之为'parent'。
foreach (CheckBox child in parent.Controls)
{
if (child == null) // Skip children that are not Checkboxes
continue;
// Save the child Checkbox
}
答案 2 :(得分:0)
您无法序列化表单。如果您选中或取消选中复选框后跟踪的课程,则可以序列化该课程。然后反序列化它以重建表单。
答案 3 :(得分:0)
您可以使用CheckedListbox。通过使用CheckedListBox.CheckedItems属性,您只能获取已检查的项目。
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() + ".");
}
}
答案 4 :(得分:0)
您可以处理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;
}
}
希望它有所帮助...... !!