如何重置组框项目?
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 是什么,但我想您应该知道检查它是什么并分配您想要的值
我想在单击按钮后清理我的组框项目。
我尝试了一些代码块,但它们不适用于重置控件。
我不想移除或删除它,我只想重置组框中的项目。
这适用于删除组框项目。
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 是什么,但我想您应该知道检查它是什么并分配您想要的值