如何缩短这个重复的C#TextBox.Clear代码?

时间:2017-03-19 18:24:00

标签: c# winforms textbox groupbox

在我学习编码的过程中,最近通过线程阅读了很多内容!

从本质上讲,我所知道的只是自学而且非常基础,所以我想开始变得更专业

我想缩短这些代码(以最简单的方式),因为我经常会得到非常重复的代码!这是一个主要的例子

private void button2_Click(object sender, EventArgs e)
    {
        textBox1.Clear();
        textBox2.Clear();
        textBox3.Clear();
        textBox4.Clear();
        textBox5.Clear();
        textBox6.Clear();
        textBox7.Clear();
        textBox8.Clear();
        textBox9.Clear();
        textBox10.Clear();
        textBox11.Clear();
        textBox12.Clear();
    }

对于上下文,我无法清除表单上的所有文本框,因为textBox13总是有一个我无法删除的有用值! 编辑*文本框1到6在groupBox1中,textBoxes 7-12在groupBox2中。这看起来很重要;我只是使用groupbox工具来清除程序!

如果有人可以提供帮助,我将非常感激!请记住,我仍然是编码新手,所以我不熟悉一些功能。

以下是该计划的图片帮助!

5 个答案:

答案 0 :(得分:2)

假设您所有的文本框名称以您显示的格式开头,您可以使用:

        foreach (Control control in Controls)
        {
            if (control.Name.StartsWith("textBox") && !control.Name.EndsWith("13") && control.GetType() == typeof(TextBox))
            {
                TextBox textBox = (TextBox)control;
                textBox.Clear();
            }
        }

修改

如果您希望它与组框一起使用,请通过调用ClearTextBoxes来使用此代码(只需编写“ClearTextBoxes();”)

    private void ClearTextBoxes()
    {
        foreach (Control control in Controls)
        {
            ClearTextBox(control);
        }
    }

    private void ClearTextBox(Control control)
    {

        if (control.GetType() == typeof(TextBox))
        {
            if (control.Name.StartsWith("textBox") && !control.Name.EndsWith("13"))
            {
                TextBox textBox = (TextBox)control;
                textBox.Clear();
            }
        }
        else if (control.GetType() == typeof(GroupBox))
        {
            GroupBox groupBox = (GroupBox)control;

            foreach (Control groupBoxControl in groupBox.Controls)
            {
                ClearTextBox(groupBoxControl);
            }

        }
    }

答案 1 :(得分:0)

当前设置不允许您快速清除所有内容,因为每个变量即使它们具有相同类型和相似名称,也是不同的实体,您无法迭代它们。

无论如何,你可以将它们分组在一个数组中并像这样迭代它们:

// Fill this array in an Init function
YourType[] textBoxes;

private void button2_Click(object sender, EventArgs e)
{
    // Iterate through the whole array except for the last element
    for(int i=0; i<textBoxes.Length-1; i++)
    {
        textBoxes[i].Clear();
    }
}

答案 2 :(得分:0)

一种可能的解决方案是在列表中存储文本框

List<TextBox> textBoxes

然后使用 for foreach 循环并调用 Clear()方法迭代此集合。

或使用扩展方法 ForEach()

textBoxes.ForEach(x => x.Clear());

答案 3 :(得分:0)

最简单的方法是准备一个包含所有文本框对象的集合

var textBoxes = new List<TextBox> { textBox1,textBox2,textBox3};// fill in the rest

并且只是与一个&#39; foreach&#39;在它上面

textBoxes.ForEach(textBox => textBox.Clear());

这是一个简单的建议。 您也可以使用反射来使其更隐含,但它不值得

答案 4 :(得分:0)

通常具有太多的特定控件可能表示您可以考虑使用不同类型的控件,但基于屏幕截图似乎并非如此。你可以使用array:

foreach (var t in new[] { textBox1, textBox2, textBox3 })
    t.Clear();

如果控件直接在表单中,则为:

foreach (Control c in this.Controls)
    if (c is TextBox && c.Name != "textBox13")
        c.Text = "";                            // .Text = "" is what TextBox.Clear() does

但因为控件在其他控件中:

foreach (Control c in this.groupBox1.Controls) if (c is TextBox) c.Text = ""; 
foreach (Control c in this.groupBox2.Controls) if (c is TextBox) c.Text = ""; 

或:

foreach (var gb in new[] { groupBox1, groupBox2 })
    foreach (Control c in gb.Controls)
        if (c is TextBox) c.Text = "";