如何使用 int i 选择文本框 NR



我有10个文本框。像textBox1.TexttextBox2.Text等等。我需要使用textBox2.Text if i=2textBox2.Text if i =3等。 我做了:

string t = "textBox"+i+".Text";

但结果是"textBox1.Text"。 如何将"i"值插入文本框名称而不是 1。并以文本形式获取结果框1.文本 所以我可以将其用作名称并将值从文本框传递到我的程序。

根据我认为您的要求,您可以将对数组中每个TextBox的引用存储在数组中,然后使用您的int来引用它。

TextBox[] boxes = new TextBox[10];
boxes[0] = textBox1;
// ... follow the pattern
boxes[9] = textBox10;
string value = boxes[i-1].Text; // Gets the value of the textBoxi.Text

你可以这样做:

private TextBox GetTB(int i) {
string name = "textBox" + i.ToString();
foreach (var ctrl in Controls) {
var tbox = ctrl as TextBox;
if (tbox?.Name == name) return tbox;
}
return null
}

如果需要以这种方式在 C# 代码中访问它们,最简单的方法是维护这些文本框的数组或List,并按其数值的顺序进行索引。然后,您可以简单地引用textBoxes[i-1]并获取编号为"i"的文本框。如何获得该阵列取决于您正在开发的内容。对于 WinForms,可以在 Form.Controls 属性上使用一点 Linq:

public static IEnumerable<Control> Flatten(this IEnumerable<Control> controls)        
{
var results = new List<Control>();
foreach (var control in controls)
{
results.Add(control);
control.Controls.OfType<Control>().Flatten(results);
}
return results;
}
private static void Flatten(this IEnumerable<Control> controls, List<Control> results)
{
foreach (var control in controls)
{
results.Add(control);
control.Controls.OfType<Control>().Flatten(results);
}
}
...
var textboxes = Form.Controls.Flatten()
.OfType<TextBox>()
.Where(t=>t.Name.StartsWith("textBox"))
.OrderBy(t=>t.Name)
.ToArray();

最新更新