2014-02-28 242 views
0

我有一些Devexpress控件。如何通過反射訪問屬性?

我想使用反射設置一些屬性。

讓我們來說說TextEdit。

通常情況下,設置文本框的邊框顏色,我會做:

TextEdit1.Properties.Appearance.BorderColor = whatever... 

使用反射我想:

SetProperty(TextEdit1, "Properties.Appearance.BorderColor", RGB(200, 200, 200)) 

'Where SetProperty sub is 
Private Sub SetProperty(ByVal Control As Object, ByVal PropertyName As String, ByVal Args As Object) 
    If Not IsNothing(Control.GetType.GetProperty(PropertyName)) Then 
     CallByName(Control, PropertyName, CallType.Set, Args) 
    End If 
End Sub 

此代碼不會因爲結果工作Control.GetType.GetProperty(PropertyName)始終爲空。

有誰知道如何訪問這種「複合」類型的屬性?

感謝

+0

是,*咳嗽*,有點複雜多了。您首先必須爲Properties屬性執行Get操作,然後執行Get for the Appearance屬性,然後爲BorderColor屬性設置Set。所有人都希望編譯器能夠爲你做這件事。 –

回答

0

你將不得不做這樣的事情:

Dim prop = TextEdit1.GetType.GetProperty("Properties").GetValue(TextEdit1) 
Dim appe = prop.GetType.GetProperty("Appearance").GetValue(prop) 
appe.GetType.GetProperty("BorderColor").SetValue(appe, Color.Red)