您好 在我的表单中,我使用了多个容器,例如面板,组合框。根据我的要求,我必须清除所有驻留在容器中的控件。为此,我编写了如下代码: -
foreach (Control x in ControlContainer.Controls)//Error
{
if (x is System.Windows.Forms.TextBox)
((TextBox)x).Text = String.Empty;
else (x is System.Windows.Forms.ComboBox)
{
((ComboBox)x).SelectedIndex = -1;
((TextBox)x).Text = String.Empty;
}
}
但它不能正常工作,我收到的错误如下:'object'不包含'Controls'的定义
请帮助
答案 0 :(得分:0)
ControlContainer的声明类型是什么?从错误来看,它是“对象”。大多数容器都继承自System.Windows.Controls.Panel,因此您可以使用:
Panel panel = ControlContainer as Panel;
foreach (Control x in panel.Children) { ... }
答案 1 :(得分:0)
来自ASP.NET Forums的一些递归示例:
public static void ClearTxtBox(Control control)
{
foreach (Control ctrl in control.Controls)
{
if (ctrl is TextBox)
(TextBox)ctrl.Text = "";
if (ctrl.HasControls())
ClearTxtBox(ctrl);
}
}
我认为ControlContainer
不会以您的思维方式返回控件。
答案 2 :(得分:0)
只需使用:
foreach (Control item in (groupBox1 as Control).Controls)
{
if (item is TextBox)
{
item.Text = "";
}
if (item is ComboBox)
{
(item as ComboBox).SelectedIndex = -1;
(item as ComboBox).Text = "";
}
}
它可以是groupBox1或面板或任何其他使用Control作为基础。