我在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;
但是我没有运气,请尝试解释什么是错误的,并帮我找到更合适的解决方案!
由于
答案 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
}
}