2014-10-17 56 views
0

我正在写一个库,允许我自定义表单元素。下面的代码是一个函数,获取控件的名称,获取属性的名称,然后设置控件的属性,但我似乎无法让它工作出于某种原因。感谢任何帮助appricated。使用字符串设置控件属性C#

代码:

public void SetProp(string name, string prop, string value) 
    { 
     Form FormControl = Application.OpenForms[form]; 
     Control mycontrol = FormControl.Controls.Find(name, true)[0]; 

     PropertyInfo pInfo = mycontrol.GetType().GetProperty(prop); 
     TypeConverter tc = TypeDescriptor.GetConverter(pInfo.PropertyType); 
     var x = tc.ConvertFromString(value); 
     pInfo.SetValue(name, x, null); 
    } 

调用示例:

SetProp("greg", "Text", "hi") 
+0

'pInfo.SetValue()'看起来是错误的。你应该传递'mycontrol',而不是'name'。试试'pInfo.SetValue(mycontrol,x);'。 – TyCobb 2014-10-17 00:05:05

+0

@TyCobb是的,解决了这个问题。非常感谢你! – gregyjames 2014-10-17 00:15:43

回答

2

你需要在实际的源对象传递到PropertyInfo.SetValue调用,这样其实是可以被修改。 PropertyInfo基本上只是关于属性(因此名称)的信息,它没有与该特定实例的附件。

你可以得到它改变你的电话,像这样的工作:

pInfo.SetValue(mycontrol, x); 

http://msdn.microsoft.com/en-us/library/hh194291(v=vs.110).aspx