要列出的文本框中的文本

本文关键字:文本 | 更新日期: 2023-09-27 18:15:29

我对C#和整体编程都很陌生,所以在你看来,我的问题可能很愚蠢,但现在是。

我创建了一个包含7个文本框的表单,我想从这些文本框中收集文本并将其添加到列表中。然而,我收到一个错误,说System.Windows.Forms.TextBox是一个"类型",但使用起来像一个"变量"。我该怎么办?

for (int i = 1; i < 8; i++)
{
    if (TextBox[i].Text == "")
    {
        days.Add("Restday");
    }
    else
    {
        days.Add(TextBox[i].Text);
    }   
}

要列出的文本框中的文本

TextBox是一种类型。所以TextBox[i]给你带来了麻烦。

你总是可以做这样的

foreach(Control ctrl in yourform.Controls)
{
    Textbox = ctrl as TextBox;
    if(txtBox != null)
    {
        if (txtBox.Text == "")
        {
            days.Add("Restday");
        }
        else
        {
            days.Add(txtBox.Text);
        } 
    }
}

这适用于一个基本的形式。如果你有面板和其他容器来组织你的控件,Guffa答案中描述的方法可能会更好。这也可以重写为接受Control递归使用的集合来访问所有控件的方法。

将文本框引用放在一个数组中,这样您就可以轻松地循环使用它们。如果您的文本框命名为TextBox1TextBox7:

TextBox[] boxes = {
  TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7
};
foreach (TextBox box in boxes) {
  if (box.Text == "") {
    days.Add("Restday");
  } else {
    days.Add(box.Text);
  }
}

我想您没有一个名为TextBox的数组,这就是错误的原因。您可以尝试以下操作:

List<strig> days = this.Controls.OfType<TextBox>
                                .Select(r=> string.IsNullOrWhiteSpace(r.Text) 
                                            ? "Restday" : r.Text)
                                .ToList();

但是上面会直接给你添加到表单上的文本框,如果这些文本框在其他控件中,那么你可以递归地寻找

进入表单编辑器并选择其中一个文本框。现在找到属性窗口。如果不可见,则单击查看->属性窗口

其中的一个属性将是文本框控件的名称。使用它来访问它的文本值,如下所示:

days.Add(txtMyTextboxName.Text);

如果必须遍历文本框,则可以执行以下操作:

foreach(var Textbox in this.Controls.OfType<TextBox>())
{
    if (Textbox.Text == "")
    {
        days.Add("Restday");
    }
    else
    {
        days.Add(Textbox.Text);
    }   
}

但请记住,这是一种非常不标准的方法,不推荐使用。