如何创建要在其他方法中使用的Textbox项目列表?

时间:2015-12-08 17:43:04

标签: c# winforms

我在winforms表单上有一系列5个文本框,用于将数据收集为字符串。我打算以多种方式使用这些框,从一个方法清除每个框的内容,到一个方法,在导出到文本文件之前从每个框中获取数据。

为了做到这一点,我计划创建一个List<Textbox>,它基本上是所有5个框的列表,所以我以后可以使用代码,如

foreach(Texbox box in *texboxList*)
{
    box.Clear()
} 

到目前为止,我唯一的想法是创建一个单独的方法,将所有框添加到列表中,然后以某种方式将方法的结果作为参数传递给相关方法,例如清除框的方法。我目前拥有的代码如下所示。

public List<TextBox> Clear_entered_data()
{
    List<TextBox> textBoxes = new List<TextBox>();
    textBoxes.Add(tbox1);
    textBoxes.Add(tbox2);
    textBoxes.Add(tbox3);
    textBoxes.Add(tbox4);
    textBoxes.Add(tbox5);
    return textBoxes;
}

这是我用来生成要使用的文本框列表的代码。我认为我遇到的问题是理解如何通过参数将其传递给其他方法。我想在此处使用该列表的方法如下所示。

private void Clear_button_Click(object sender, EventArgs e, List<TextBox> textBoxes)
  {

    DialogResult Clear_validation = MessageBox.Show("Are you sure you would like to clear all data from the form?","Clear data?", MessageBoxButtons.YesNo);

    if(Clear_validation == DialogResult.Yes)
    {
        foreach (TextBox box in textBoxes)
        {
            box.Clear();
        }
    }
}

使用上面的代码,我在运行时收到错误:

&#39;错误1&#39; Clear_button_Click&#39;匹配委托&#39; System.EventHandler&#39;&#39;

但是我没有运气,请尝试解释什么是错误的,并帮我找到更合适的解决方案!

由于

2 个答案:

答案 0 :(得分:0)

创建一个文本框列表 _textBoxes = new List<TextBox>(); _textBoxes.Add(tbox1); _textBoxes.Add(tbox2); _textBoxes.Add(tbox3); _textBoxes.Add(tbox4); _textBoxes.Add(tbox5);

的私有类成员

然后在调用InitializeComponents之后(因为在此之前,如果您使用IDE创建它们,则textboxex不存在)放置代码以将文本框添加到列表中

public List<TextBox> ClearTextBoxes() {
    foreach(var textBox in _textBoxes){
       textBox.Clear();
    }
}

现在您可以在您的方法中使用包含所有已创建的TextBox

的_textBox

您的公开列表Clear_entered_data()已成为

while (!check) {
    str = in.nextLine();
    if (in.hasNextLine() && str.equals("Y")) {
        hours = ran.nextInt(11) + 1;
        minutes = ran.nextInt(60);
        if (minutes < 10) {
            System.out.println(hours + ":" + "0" + minutes);
        } else {
            System.out.println(hours + ":" + minutes);
        }
        System.out.println("Do you want another time?");

    } else {
        check = true;
    }
}

答案 1 :(得分:0)

如果您使用了命名约定,那么您可以像这样迭代窗体的控件集合 - 在我的示例中,名称都以“SpecialTextBox”开头:

foreach(Control c in someFormReference.Controls)
{
    if (c.GetType() == typeof(TextBox) && c.Name.StartsWith("SpecialTextBox"))
    {
        // do your thing here
    }
}