如何重置组框项目?

时间:2016-06-28 07:34:48

标签: c# winforms groupbox

点击按钮后,我想清理我的群组项目。

我尝试了一些代码块,但它们不适用于重置控件。

我不想删除或删除它,我只想重置组框中的项目。

这适用于删除groupbox项目。

 public void ClearPanels(GroupBox control)
    {
        control.Controls.Clear();
    }

或者

groupBox2.Controls.Clear();

在点击之前看起来像这样。 Before Click

当我点击按钮时,您可以在右侧看到。

After Click

它已删除,但我想重置它。

我有什么想法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

我打算明确表示默认情况下全部保留。你需要使用组框内的所有控件,并根据他们做什么控件做什么或其他什么。

foreach (Control ctr in GB.Controls)
{
    if (ctr is TextBox)
    {
        ctr.Text = "";
    }
    else if (ctr is CheckedListBox)
    {
        CheckedListBox clb = (CheckedListBox)ctr;
        foreach (int checkedItemIndex in clb.CheckedIndices)
        {
            clb.SetItemChecked(checkedItemIndex, false);
        }
    }
    else if (ctr is CheckBox)
    {
        ((CheckBox)ctr).Checked = false;
    }
    else if (ctr is ComboBox)
    {
        ((ComboBox)ctr).SelectedIndex = 0;
    }
}

我不知道Deneyim和Not是什么,但我想你会想到检查它是什么并将你想要的价值放在一边

答案 1 :(得分:1)

我认为术语clear在某种程度上取决于您使用的控件类型。对于TextBox您可能想要清空Text属性,对于ListBox,您可能想删除所有项目。因此,控件没有通用的Clear()方法。

你能做的就是这样:

public void ClearPanels(GroupBox control)
{
    foreach(Control childControl in control.Controls)
        childControl.ResetText();
}

这将遍历Control中的所有子GroupBox,并重置其Text属性。您可能希望为某些类型的Control添加特殊处理。

如果您的GroupBox包含嵌套控件(例如另一个GroupBox并且还有其他控件),则可能需要递归此方法:

public void ClearPanels(Control control)
{
    foreach(Control childControl in control.Controls)
    {
        childControl.ResetText();
        ClearPanels(childControl); // recursive call
    }
}

真的"清除"你的控件,你必须检查他们的具体类型。所以可以采用一种先进的方法:

public void ClearPanels(GroupBox control)
{
    foreach(ListBox listBox in control.Controls.OfType<ListBox>())
    {
        listBox.Items.Clear();
        // do more ListBox cleanup
    }
    foreach(CheckedListBox listBox in control.Controls.OfType<CheckedListBox>())
    {
        listBox.Items.Clear();
        // do more CheckedListBox cleanup
    }
    foreach(ListView listView in control.Controls.OfType<ListView>())
    {
        listView.Items.Clear();
        // do more ListView cleanup
    }
    foreach(CheckBox checkBox in control.Controls.OfType<CheckBox>())
    {
        checkBox.Checked = false;
        // do more CheckBox cleanup
    }
    // etc...
}