C#迭代数组中的已知文本框

时间:2015-09-30 00:51:40

标签: c# arrays

我正在尝试从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”类型的表达式

4 个答案:

答案 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示例