2015-04-07 115 views
0

我正在使用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变量字符串替换。 这是我的第一篇文章。请原谅错误。

回答

2

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

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

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

如果你真的想使用的名称,你可以在搜索它们当前窗体的控件集合(假设这是的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; 
} 

如果要修改的CUR 所有组合框控件租表(再次,假设的WinForms),你可以使用LINQ的OfType<>()方法与控件集合结合:

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

想到第二个解决方案没有奏效,第一个工作。它满足了我的要求。我其实想用循环来改变这些值,以便在有很多这样的值时,我可以很容易地处理这些值。所以没关系。 –

+0

修复了第二个代码块,以防你也想试一试。这是不正确的..我的一部分复制/粘贴错误。 –

0

我不认为这会工作得如你期待..

我反而建立组合框控件列表,然后通过对象名单迭代应用属性更改。

如果您对您的形式命名BOX1,BOX2,BOX3 3个组合框...那么你应该能够做到以下几点:

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); 
} 
0

如果你的控件在窗体上,和你的代码是也运行在相同的表单上通过使用键的表单控件集合访问控件。关键是控制名称。

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