C# 如何在C中清除WinForm上的所有文本框、组合框和日期时间选择器?

C# 如何在C中清除WinForm上的所有文本框、组合框和日期时间选择器?,c#,winforms,combobox,textbox,datetimepicker,C#,Winforms,Combobox,Textbox,Datetimepicker,我在VS2012中使用C和WinForms开发我的应用程序,我很好奇应该使用什么样的例程来清除所有输入数据的方法,包括文本框、组合框和日期时间选择器。我在谷歌上搜索了一下,找到了一些“答案”,但似乎没有一个有效,也没有一个确实有用 [编辑]: 我一直在研究,事实上找到了一种有用的方法,我只需添加一些“如果”就可以得到我想要的: private void ResetFields() { foreach (Control ctrl in this.Controls)

我在VS2012中使用C和WinForms开发我的应用程序,我很好奇应该使用什么样的例程来清除所有输入数据的方法,包括文本框、组合框和日期时间选择器。我在谷歌上搜索了一下,找到了一些“答案”,但似乎没有一个有效,也没有一个确实有用

[编辑]:

我一直在研究,事实上找到了一种有用的方法,我只需添加一些“如果”就可以得到我想要的:

private void ResetFields()
    {
        foreach (Control ctrl in this.Controls)
        {
            if (ctrl is TextBox)
            {
                TextBox tb = (TextBox)ctrl;
                if (tb != null)
                {
                    tb.Text = string.Empty;
                }
            }
            else if (ctrl is ComboBox)
            {
                ComboBox dd = (ComboBox)ctrl;
                if (dd != null)
                {
                    dd.Text = string.Empty;
                    dd.SelectedIndex = -1;
                }
            }
            else if (ctrl is DateTimePicker)
            {
                DateTimePicker dtp = (DateTimePicker)ctrl;
                if (dtp != null)
                {
                    dtp.Text = DateTime.Today.ToShortDateString();
                }
            }
        }
    }

循环表单控件,将它们与类型匹配,并将其设置为或null

循环表单控件,将它们与类型匹配,并将其设置为或null

您可以只循环表单的所有控件并根据控件类型清除您可以只循环表单的所有控件并根据控件类型清除我们可以清除所有文本框、组合框,但不能清除日期时间选择器

如果要清除DateTimePicker,必须设置以下属性: Format=自定义,CustomFormat=和要在DateTimePicker中选择日期的时间

这可能是解决方案:

    public static void ClearAll(Control control)
    {
        foreach (Control c in control.Controls)
        {
            var texbox = c as TextBox;
            var comboBox = c as ComboBox;
            var dateTimePicker = c as DateTimePicker;

            if (texbox != null)
                texbox.Clear();
            if (comboBox != null)
                comboBox.SelectedIndex = -1;
            if (dateTimePicker != null)
            {
                dateTimePicker.Format = DateTimePickerFormat.Short;
                dateTimePicker.CustomFormat = " ";
            }
            if (c.HasChildren)
                ClearAll(c);
        }
    }
我们可以清除所有文本框、组合框,但不能清除日期时间选择器

如果要清除DateTimePicker,必须设置以下属性: Format=自定义,CustomFormat=和要在DateTimePicker中选择日期的时间

这可能是解决方案:

    public static void ClearAll(Control control)
    {
        foreach (Control c in control.Controls)
        {
            var texbox = c as TextBox;
            var comboBox = c as ComboBox;
            var dateTimePicker = c as DateTimePicker;

            if (texbox != null)
                texbox.Clear();
            if (comboBox != null)
                comboBox.SelectedIndex = -1;
            if (dateTimePicker != null)
            {
                dateTimePicker.Format = DateTimePickerFormat.Short;
                dateTimePicker.CustomFormat = " ";
            }
            if (c.HasChildren)
                ClearAll(c);
        }
    }
大概是这样的:

然后:

ClearThem(this);
另一种选择: 创建一个从Panel派生的类,包含所有需要的内容,并将其固定在表单中。当您需要刷新时-只需使用该面板的新实例替换该面板。

类似以下内容:

然后:

ClearThem(this);
另一种选择:
创建一个从Panel派生的类,包含所有需要的内容,并将其固定在表单中。当您需要刷新时-只需将该面板替换为该面板的新实例。

您正在寻找一种机制,可以神奇地清除表单上的所有文本框等?是的,我当然在寻找魔法。。。不是要添加到代码中的循环示例。我想要魔法,还不够好。你也必须检查孩子们的所有孩子们。看到我的答案了。我的似乎正常。那是因为你没有嵌套控件。如果在某个时候你决定,比如说,添加一个带有文本框的面板,会怎么样?然后它会失败。你在寻找一种机制,可以神奇地清除表单上的所有文本框等?是的,我当然在寻找魔法。。。不是要添加到代码中的循环示例。我想要魔法,还不够好。你也必须检查孩子们的所有孩子们。看到我的答案了。我的似乎正常。那是因为你没有嵌套控件。如果在某个时候你决定,比如说,添加一个带有文本框的面板,会怎么样?然后它会失败。考虑DATETMEXPACER1.Value= DATETMEM。今天考虑DATETMEXPACER1.1. value = DATETIME.今天