如何重置组框项目?

How to reset groupbox items?

我想在单击按钮后清理我的组框项目。

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

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

这适用于删除组框项目。

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

或这个

groupBox2.Controls.Clear();

点击前看起来像这样。

当我点击按钮时,正如您在右侧看到的那样。

已删除,但我想重新设置。

有什么办法可以做到这一点吗?

我认为 clear 这个词在一定程度上取决于您使用的控件类型。对于 TextBox,您可能希望清空 Text 属性,对于 ListBox,您可能希望删除所有项目。所以控件没有通用的Clear()方法。

你能做的就是这样:

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

这会遍历 GroupBox 中的所有子 Control 并重置其中的 Text 属性。您可能希望对某些类型的 Control.

添加特殊处理

如果您的 GroupBox 包含嵌套控件(例如另一个带有更多控件的 GroupBox),您可能需要使此方法递归:

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

要真正 "clear" 您的控件,您必须检查它们的特定类型。所以有点高级的方法可能是这样的:

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...
}

我假设 clear 意味着默认保留所有内容。您需要 llop 组框内的所有控件,并根据它们的控件执行某些操作。

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 是什么,但我想您应该知道检查它是什么并分配您想要的值