填充连续的文本框和标签,而不是集合中值的索引

本文关键字:集合 索引 文本 连续 标签 填充 | 更新日期: 2023-09-27 18:03:25

我有,在一个形式,连续的文本框和标签命名为tb1,tb2,tb3…, label2 label1 label3…

我有一个包含若干键值对的字典。

如何填充字典中对应值对的标签和文本框?dic。键[1]-> label1和dic。取值[1]~ tb1…像这样。

填充连续的文本框和标签,而不是集合中值的索引

在另一个答案中,建议创建一个标签和文本框的集合。我对这种方法的担心是,开发人员可能会忘记这样做,或者顺序可能会改变。

每个控件都有Name属性,该属性存储该控件的名称。此属性由Visual Studio设置。在你的代码中,如果你没有使用控件的Name属性,你可以使用下面的代码来实现你想要的。

for(int i = 0; i < dic.Count; i++)
{
    // As Control.Find returns an array of controls whose name match the specified string,
    // in this example I had picked the first control
    // you can make it more robust by checking
    // - the number of controls returned,
    // - the type of control, etc
    TextBox txt = (TextBox) this.Controls.Find("tb" + (i + 1).ToString(), true)[0];
    Label lbl = (Label) this.Controls.Find("label" + (i + 1).ToString(), true)[0];

    txt.Text = dic[i].Value;
    lbl.Text = dic[i].Key;
}

最好的办法是在表单的构造函数中初始化一个(或两个)List,将所有的标签和文本框放入其中,以便在遍历字典时检查它们。

private List<Label> labels = new List<Label>();
private List<TextBox> textBoxes = new List<TextBox>();
public MyForm()
{
    labels.Add(myLabel1);
    labels.Add(myLabel2);
    labels.Add(myLabel3);
    textBoxes.Add(myTB1);
    textBoxes.Add(myTB2);
    textBoxes.Add(myTB3);
}
private void addValuesFromDictionary(Dictionary<string, string> dic)
{
    for (int i = 0; i < dic.Count; i++)
    {
        labels[i].Text = dic[i].Key;
        textBoxes[i].Text = dic[i].Value;
    }
}