从数组中迭代已知的文本框
本文关键字:文本 数组 迭代 | 更新日期: 2023-09-27 18:15:24
我正在尝试从string
数组中的字符串迭代文本框
static string[] TextBoxes = {
"EmpName",
"Sales",
"BasePay",
"Commission",
"GrossPay",
"Deductions",
"Housing",
"FoodAndClothing",
"Entertainment",
"Misc"
};
以上每个元素都是表单的一部分,例如txthouse是housing输入元素。等等。
迭代发生在这里
private void btnClear_Click(object sender, EventArgs e)
{
for (byte i = 0; i < TextBoxes.Length; i++)
{
this["txt" + TextBoxes[i]].Text = "";
}
this.txtEmpName.Focus();
}
除了我得到这个System.String
的一个奇怪的"错误",我们不能从this
对象调用这样的对象吗?
刚刚读到一个消息来源说这。getProperty可能会起作用,所以我会试试。
误差不能用[]对类型为"Pay_Calculator"的表达式应用索引。PayCalculator '
一个解决方案是使用反射/动态对象。
var me = (dynamic) this;
foreach (var name in TextBoxes)
{
((TextBox) me['txt' + name]).Value = string.Empty;
}
另一个解决方案是对所有控件递归,这样就不需要为所有文本框命名了。
private void btnClear_Click(object sender, EventArgs e)
{
ClearTextBox(this);
}
void ClearTextBox (Control c)
{
var t = c as Textbox;
if (t != null)
t.Value = string.Empty;
foreach (var child in c.Controls)
ClearTextBox(child);
}
我认为你需要这样做
private void btnClear_Click(object sender, EventArgs e)
{
for (byte i = 0; i < TextBoxes.Length; i++)
{
if (this.Controls.ContainsKey("txt" + TextBoxes[i]))
{
TextBox txtBox = this.Controls["txt" + TextBoxes[i]] as TextBox;
if (txtBox != null)
{
// Do your Stuff
txtBox.Text = "";
}
}
}
}
假设WinForms,将static
更改为private
并使用Controls.Find():
private string[] TextBoxes = {
"EmpName",
"Sales",
"BasePay",
"Commission",
"GrossPay",
"Deductions",
"Housing",
"FoodAndClothing",
"Entertainment",
"Misc"
};
private void btnClear_Click(object sender, EventArgs e)
{
foreach (string name in TextBoxes)
{
TextBox tb = this.Controls.Find("txt" + name, true).FirstOrDefault() as TextBox;
if (tb != null)
{
tb.Text = "";
}
}
this.txtEmpName.Focus();
}
您必须遍历控件并检查该控件是否为文本框,稍后您可以检查控件的名称以匹配您的数组元素并清除它。
您可以遵循以下示例