从数组中迭代已知的文本框

本文关键字:文本 数组 迭代 | 更新日期: 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();
    }

您必须遍历控件并检查该控件是否为文本框,稍后您可以检查控件的名称以匹配您的数组元素并清除它。

您可以遵循以下示例