保存复选框C#

保存复选框C#,c#,forms,C#,Forms,嗨,我有一个表格,我正在做的人可以检查框,看看哪些项目,他们已经阅读。如何保存复选框而不必对每个复选框进行大量循环?(总共有66个框)。您无法序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后反序列化它以重建表单。不能序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后将其反序列化以重建表单。您可以使用Linq优雅地循环检查复选框: var checkBoxes = Controls.OfType<CheckBox>(); foreac

嗨,我有一个表格,我正在做的人可以检查框,看看哪些项目,他们已经阅读。如何保存复选框而不必对每个复选框进行大量循环?(总共有66个框)。

您无法序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后反序列化它以重建表单。

不能序列化表单。如果有一个类在选中或未选中复选框时跟踪,则可以序列化该类。然后将其反序列化以重建表单。

您可以使用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;
}
}

然后,只需使用您最喜欢的支持通用词典的序列化程序对状态进行序列化。

您可以使用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);}