-1

我对 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);
    }   
}
4

4 回答 4

3

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递归使用集合以到达所有控件的方法。

于 2013-05-27T18:14:18.413 回答
2

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

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

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

于 2013-05-27T18:13:22.633 回答
2

将文本框引用放在一个数组中,以便您可以轻松地循环它们。如果您的文本框被命名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);
  }
}
于 2013-05-27T18:14:32.073 回答
0

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

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

days.Add(txtMyTextboxName.Text);

如果您必须遍历文本框,您可以这样做:

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

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

于 2013-05-27T18:16:17.863 回答