我真的很擅长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);
}
}
答案 0 :(得分: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);
}
}
}
这项工作为基本形式。如果您有pannel和其他容器来整理您的控件,Guffa answer中描述的approch可能会更好。这也可以重写为接受Control
递归使用集合以达到所有控件的方法。
答案 1 :(得分:2)
我猜你没有一个名为TextBox
的数组,这就是错误的原因。您可以尝试以下操作:
List<strig> days = this.Controls.OfType<TextBox>
.Select(r=> string.IsNullOrWhiteSpace(r.Text)
? "Restday" : r.Text)
.ToList();
但是上面会给你直接在表单上添加的文本框,如果这些文本框在其他控件中,那么you can look for recursively
答案 2 :(得分:2)
将文本框引用放在数组中,以便您可以轻松地遍历它们。如果您的文本框名为TextBox1
到TextBox7
:
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);
}
}
答案 3 :(得分:0)
进入表单编辑器并选择一个文本框。现在找到属性窗口。如果它不可见,请单击视图 - >属性窗口
其中一个属性将是文本框控件的名称。使用它来访问它的文本值,如下所示:
days.Add(txtMyTextboxName.Text);
如果你必须遍历文本框,你可以这样做:
foreach(var Textbox in this.Controls.OfType<TextBox>())
{
if (Textbox.Text == "")
{
days.Add("Restday");
}
else
{
days.Add(Textbox.Text);
}
}
但请记住,这是一种非常标准的方法,不推荐使用。