C# 我如何创建一个文本框项目列表,以便在其他方法中使用?
我在winforms表单上有一系列5个文本框,用于收集字符串形式的数据。我打算以多种方式使用这些框,从清除每个框的内容的方法,到在导出到文本文件之前检查每个框中的数据的方法 为了做到这一点,我计划创建一个C# 我如何创建一个文本框项目列表,以便在其他方法中使用?,c#,winforms,C#,Winforms,我在winforms表单上有一系列5个文本框,用于收集字符串形式的数据。我打算以多种方式使用这些框,从清除每个框的内容的方法,到在导出到文本文件之前检查每个框中的数据的方法 为了做到这一点,我计划创建一个列表,它本质上是一个包含所有5个框的列表,以便以后可以使用如下代码 foreach(Texbox box in *texboxList*) { box.Clear() } 等等 到目前为止,我唯一的想法是创建一个单独的方法,将所有框添加到列表中,然后以某种方式将该方法的结果作为参数传
列表
,它本质上是一个包含所有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;
}
公共列表清除\u输入的\u数据()
{
列表文本框=新列表();
textboxs.Add(tbox1);
textboxs.Add(tbox2);
textboxs.Add(tbox3);
文本框。添加(tbox4);
文本框。添加(tbox5);
返回文本框;
}
这是我用来生成要使用的文本框列表的代码。我认为我遇到的问题是理解如何通过参数将其传递给其他方法。我想利用这个列表的方法如下所示
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();
}
}
}
private void Clear\u按钮\u单击(对象发送者、事件参数、列表文本框)
{
DialogResult Clear\u validation=MessageBox.Show(“是否确实要清除表单中的所有数据?”,“清除数据?”,MessageBox按钮.YesNo);
if(Clear_validation==DialogResult.Yes)
{
foreach(文本框中的文本框)
{
box.Clear();
}
}
}
使用上面的代码,我在运行时得到错误:
'错误1没有为'Clear_button_Click'加载与委托'System.EventHandler'匹配的重载'
但我运气不好,请试着解释一下哪里出了问题,并帮助我找到更合适的解决方案
谢谢创建一个私有类成员,它是文本框列表
list\u文本框的成员代码>
然后在调用InitializeComponents之后(因为在此之前,如果您使用IDE创建textboxex,则textboxex不存在),将代码添加到列表中
_textBoxes = new List<TextBox>();
_textBoxes.Add(tbox1);
_textBoxes.Add(tbox2);
_textBoxes.Add(tbox3);
_textBoxes.Add(tbox4);
_textBoxes.Add(tbox5);
\u textboxs=新列表();
_textboxs.Add(tbox1);
_textboxs.Add(tbox2);
_textboxs.Add(tbox3);
_文本框。添加(tbox4);
_文本框。添加(tbox5);
现在,您可以在方法中使用包含所有已创建文本框的_文本框
您的公共列表清除\u输入的\u数据()已变为
公共列表ClearTextBox(){
foreach(文本框中的变量文本框){
textBox.Clear();
}
}
创建一个私有类成员,该类成员属于文本框列表列表\u文本框代码>
然后在调用InitializeComponents之后(因为在此之前,如果您使用IDE创建textboxex,则textboxex不存在),将代码添加到列表中
_textBoxes = new List<TextBox>();
_textBoxes.Add(tbox1);
_textBoxes.Add(tbox2);
_textBoxes.Add(tbox3);
_textBoxes.Add(tbox4);
_textBoxes.Add(tbox5);
\u textboxs=新列表();
_textboxs.Add(tbox1);
_textboxs.Add(tbox2);
_textboxs.Add(tbox3);
_文本框。添加(tbox4);
_文本框。添加(tbox5);
现在,您可以在方法中使用包含所有已创建文本框的_文本框
您的公共列表清除\u输入的\u数据()已变为
公共列表ClearTextBox(){
foreach(文本框中的变量文本框){
textBox.Clear();
}
}
如果使用命名约定,可以像这样迭代表单的控件集合-在我的示例中,所有名称都以“SpecialTextBox”开头:
如果使用命名约定,可以像这样迭代表单的控件集合-在我的示例中,名称都以“SpecialTextBox”开头:
“但我运气不好,请试着解释一下哪里出了问题”——首先,在我们向您解释之前,您必须告诉我们哪里出了问题。Clear_entered_data()看起来可以被称为更合适的名称,例如GetAllTextBox()。这正是您从五个TextBox
对象构建列表的方式。(虽然将其放在具有保留列表的支持字段的属性中可能更有意义,因此您不会每次都重新创建它。属性在语义上也可能比方法更清晰。特别是如果您将其命名为……不那么容易引起误解。)如果这在某种程度上不起作用,您需要解释问题。请在上面编辑以澄清问题。为方法名道歉,我最初的方法是tbox1.Clear()在考虑制作列表之前,为每个框编码>等。当我试图整理列表问题时,刚好错过了“但我运气不好,请尝试解释出哪里出了问题”——首先,在我们向您解释之前,您必须告诉我们出了什么问题。Clear_entered_data()看起来可以称为更合适的名称-例如GetAllTextBox().这正是从五个文本框
对象构建列表的方法。(虽然将其放在具有保留列表的支持字段的属性中可能更有意义,因此您不会每次都重新创建它。属性在语义上也可能比方法更清晰。特别是如果您将其命名为……不那么容易引起误解。)如果这在某种程度上不起作用,您需要解释问题。请在上面编辑以澄清问题。为方法名道歉,我最初的方法是tbox1.Clear()在考虑制作列表之前,为每个框编码>等。当我试图对列表问题进行排序时,它被遗漏了。如果要自动使用哪个TextBox,您甚至可以使用TextBox的.Tag属性。如果表单的控件
集合嵌套在另一个控件中,它是否包含对TextBox
的引用?如果不是,这是相当有限的。而且实际上没有必要,因为问题中的代码意味着对5TextBox
对象的引用是已知的
foreach(Control c in someFormReference.Controls)
{
if (c.GetType() == typeof(TextBox) && c.Name.StartsWith("SpecialTextBox"))
{
// do your thing here
}
}