我有10个文本框。像textBox1.Text
、textBox2.Text
等等。我需要使用textBox2.Text if i=2
、textBox2.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();