如何清除MDI子级的所有表单控件?

时间:2019-05-24 13:19:51

标签: c# winforms mdi

我有一个清除非MDI子窗体的函数,但是当我将其应用于MDI子窗体时,它什么也不做。我曾尝试从几个不同的角度来解决这个问题,但没有任何运气,希望stackoverflow可以帮助您!

我尝试了显示的代码,也尝试了引用当前表单的父级的子级(我知道是圆形的)。

    public static void ResetAllControls(Control form)
    {
        foreach (Control control in form.Controls)
        {
            if (control is TextBox)
            {
                TextBox textBox = (TextBox)control;
                textBox.Text = "";
            }

            if (control is ComboBox)
            {
                ComboBox comboBox = (ComboBox)control;
                if (comboBox.Items.Count > 0)
                    comboBox.SelectedIndex = 0;
            }

            if (control is CheckBox)
            {
                CheckBox checkBox = (CheckBox)control;
                checkBox.Checked = true;
            }

            if (control is ListBox)
            {
                ListBox listBox = (ListBox)control;
                listBox.ClearSelected();
            }
        }
    }

我希望传递 this 会清除所有表单控件,就像处理标准表单一样。

1 个答案:

答案 0 :(得分:1)

我非常确定您在(例如面板)上有某种容器,并且控件在此面板上。 Form.Controls将只为您提供直接位于窗体上的控件。因此,您将不得不经常执行此操作:

public static void ResetAllControls(Control parent)
{
    foreach(var child in parent.Controls)
        ResetAllControls(child);

    if(parent is TextBox)
    {
        (parent as TextBox).Text = "";
        return;
    }
    //and so on
}