嗨,我正在制作一个表格,人们可以在其中选中复选框以查看他们已经阅读了哪些项目。如何在不为每个复选框经历大量循环的情况下保存复选框?(总共有 66 个盒子)。
问问题
341 次
5 回答
2
您可以使用 Linq 优雅地遍历复选框:
var checkBoxes = Controls.OfType<CheckBox>();
foreach (var chk in checkBoxes)
{
// Save state
}
Dictionary<string, bool>
保存状态的一种简单方法是使用控件名称作为键将选中状态置于 a中。将字典序列化为文件。
所以,
// 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
使用您最喜欢的支持通用字典的序列化程序进行序列化。
于 2012-07-10T05:14:59.147 回答
2
充实我所做的评论,假设所有复选框都在一个控件(表单或面板)上,我称之为“父级”。
foreach (CheckBox child in parent.Controls)
{
if (child == null) // Skip children that are not Checkboxes
continue;
// Save the child Checkbox
}
于 2012-07-10T05:16:58.547 回答
0
您不能序列化表单。如果您有一个在选中或未选中复选框时跟踪的类运行,您可以将其序列化。然后反序列化它以重建表单。
于 2012-07-10T05:14:38.710 回答
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() + ".");
}
}
于 2012-07-10T05:16:10.250 回答
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;
}
}
希望能帮助到你...!!
于 2012-07-10T05:17:19.287 回答