【问题标题】:How can I clear all form controls of an MDI child?如何清除 MDI 子项的所有表单控件?
【发布时间】:2019-05-24 13:19:50
【问题描述】:

我有一个清除非 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 会像处理标准表单一样清除所有表单控件。

【问题讨论】:

  • 到目前为止,从头开始最简单的方法是关闭这个并创建一个表单类的新实例。
  • 这个方法是怎么调用的?你通过什么参考?顺便说一句,当您以这种方式设置属性时,它不会导致级联效果,例如checkBox.Checked = true;comboBox.SelectedIndex = 0;

标签: c# winforms mdi


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2018-02-22
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多