2014-10-17 82 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