我正在尝试从string
数组
static string[] TextBoxes = {
"EmpName",
"Sales",
"BasePay",
"Commission",
"GrossPay",
"Deductions",
"Housing",
"FoodAndClothing",
"Entertainment",
"Misc"
};
以上每个都是表格的一部分,例如txtHousing是住房输入元素。依此类推。
迭代发生在这里
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”类型的表达式
答案 0 :(得分:3)
一种解决方案是使用Reflection / Dynamic对象。
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);
}
答案 1 :(得分:1)
我认为你需要做这样的事情
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 = "";
}
}
}
}
答案 2 :(得分:0)
假设 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();
}
答案 3 :(得分:-1)
您必须遍历控件并检查控件是否是文本框,稍后您可以检查控件的名称以匹配您的数组元素并清除它。
您可以关注this示例