如何给通过反射给控件赋值
jieon 2009-07-24 03:15:14 如何给通过反射出来的窗体然后给控件赋值? 如textbox1
在网上我找到如下方法:
/// <summary>
/// 通过反射给控件赋值操作
/// </summary>
/// <param name="ClassName">类名</param>
/// <param name="ControlName">控件名称</param>
/// <param name="PropertyName">属性名称</param>
/// <param name="PropertyValue">属性值</param>
public void SetControl(object ClassName, String ControlName, string PropertyName, object PropertyValue)
{
Assembly fn = Assembly.GetExecutingAssembly();
Form newForm = fn.CreateInstance("test.ChatFormList." + ClassName) as Form;
Type type = newForm.GetType();
FieldInfo field = type.GetField(ControlName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
if (ControlName != null)
{
object obj;
PropertyDescriptorCollection s = TypeDescriptor.GetProperties(type);
PropertyDescriptor mProperty = s.Find(PropertyName, true);
obj = field.GetValue(ClassName);
if (mProperty != null)
{
mProperty.SetValue(obj, PropertyValue);
}
}
}
运行到: obj = field.GetValue(ClassName);
出现错误:类型“test.ChatFormList.ChatForm0”上定义的字段“textBox1”不是类型为“System.String”的目标对象上的字段。 不解......