通过ComboBox迭代并使用反射引用项目

时间:2012-02-03 14:55:51

标签: c# asp.net .net

我有一些自定义控件:

1)1用于字符串输入(文本框)

2)1用于多个字符串输入(组合框)

3)1表示整数输入

第1页进行一些处理,根据用户输入,任何数量的控件都以任何顺序添加到第2页。由于上面的控件的添加以及它们的排序是完全动态的,我不得不通常使用refelection来引用自定义控件:

例如,如果我想在上面的一个控件中引用属性(例如'Value'),我使用以下

c.GetType().GetProperty("Value")

我的问题如下:

我需要访问包含组合框的控件中的。通常我会做类似的事情:

foreach(string item in ComboBox1.items){}

当通过反射引用控件时,这似乎有点棘手....任何想法?

注意:如果可能,我想继续使用反射....

3 个答案:

答案 0 :(得分:0)

您希望获取对象的Items属性,因此请使用GetProperty反射方法。 Here是动态获取属性信息的一个很好的示例,然后here是设置值的示例。

答案 1 :(得分:0)

你可以尝试

foreach (var cntrl in Page2.Controls.OfType<ComboBox>())
{
     //
}

答案 2 :(得分:0)

要获得该属性,您可以执行以下操作,但不确定这是否属于您 正在寻找尝试。

PropertyInfo prop  = controlType.GetProperty(propertyName);// Gets Items
MethodInfo methInfo = prop.PropertyType.GetMethod(methodName); // gets the method ('Items.Add')
object obj      = prop.GetValue(newControl, null);         // gets the current 'Items
methInfo.Invoke(prop.GetValue(newControl, null), new object[] { newValue });