Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何创建一个文本框项目列表,以便在其他方法中使用?_C#_Winforms - Fatal编程技术网

C# 我如何创建一个文本框项目列表,以便在其他方法中使用?

C# 我如何创建一个文本框项目列表,以便在其他方法中使用?,c#,winforms,C#,Winforms,我在winforms表单上有一系列5个文本框,用于收集字符串形式的数据。我打算以多种方式使用这些框,从清除每个框的内容的方法,到在导出到文本文件之前检查每个框中的数据的方法 为了做到这一点,我计划创建一个列表,它本质上是一个包含所有5个框的列表,以便以后可以使用如下代码 foreach(Texbox box in *texboxList*) { box.Clear() } 等等 到目前为止,我唯一的想法是创建一个单独的方法,将所有框添加到列表中,然后以某种方式将该方法的结果作为参数传

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

为了做到这一点,我计划创建一个
列表
,它本质上是一个包含所有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
的引用?如果不是,这是相当有限的。而且实际上没有必要,因为问题中的代码意味着对5
TextBox
对象的引用是已知的
foreach(Control c in someFormReference.Controls)
{
    if (c.GetType() == typeof(TextBox) && c.Name.StartsWith("SpecialTextBox"))
    {
        // do your thing here
    }
}