保存选中的框C#

时间:2012-07-10 05:09:57

标签: c# forms

嗨我有一张表格,我正在制作一个人可以复选框以查看他们已经阅读过的内容。如何保存复选框而不通过每个复选框的大量循环? (总共有66个盒子。)

5 个答案:

答案 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;
        }
    }

希望它有所帮助...... !!