填充连续的文本框和标签,而不是集合中值的索引
本文关键字:集合 索引 文本 连续 标签 填充 | 更新日期: 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;
}
}