动态组合框名称

时间:2015-04-07 22:48:16

标签: c#

我正在使用C#。我想使用字符串变量作为组合框名称。 假设我有3个名为box1box2box3的组合框。现在我想更改这些组合框的一些属性。 我可以写:

box1.SomeProperty = SomeValue1;
box2.SomeProperty = SomeValue2;
box3.SomeProperty = SomeValue3;

但我希望在forwhile循环中执行此操作。像:

string[] names = new string[3] {"box1","box2","box3"};
int[] values= new int[3] {4,5,6};
for (int i = 0; i <= names.Length; i++)
{
    ?names[i]?.SomeProperty = values[i];
}

?name[i]?names变量中的字符串替换。 这是我的第一篇文章。请原谅错误。

3 个答案:

答案 0 :(得分:3)

如果您有一组控件,您知道自己想要更新,只需创建一个集合:

var comboBoxes = new List<ComboBox> { box1, box2, box3 };

foreach (var cb in comboBoxes)
{
    cb.SomeProperty = SomeValue1;
}

如果您真的想使用名称,可以在当前Form的控件集合中搜索它们(假设这是WinForms ...您没有指定):

var comboBoxes = new List<string> { "box1", "box2", "box3" };

foreach (var cb in comboBoxes)
{
    var box = (ComboBox)this.Controls.Find(cb, true).FirstOrDefault();

    if (box != null)
        box.SomeProperty = SomeValue1;
}

如果要在当前表单上修改所有 ComboBox控件(再次假设WinForms),可以将LINQ&#39; OfType<>()方法与Controls集合结合使用:

foreach (var cb in this.Controls.OfType<ComboBox>())
{
    cb.SomeProperty = SomeValue1;
}

答案 1 :(得分:0)

我认为它不会像你期望的那样有效..

我会建立一个ComboBox控件列表,然后迭代这个对象列表以应用属性更改。

如果您的表单上有三个ComboBox,名为box1,box2,box3 ...那么您应该能够执行以下操作:

List<ComboBox> boxes = new List<ComboBox>();
boxes = {box1, box2, box3}.ToList;

int[] values = {4, 5, 6};

for (i = 0; i <= boxes.Count - 1; i++) {
    boxes(i).SomeProperty = values(i);
}

答案 2 :(得分:0)

如果您的控件位于表单上,并且您的代码也在同一表单上运行,则使用键通过表单控件集合访问控件。关键是控件名称。

this.Controls[names[i]].SomeProperty = values[i];