2012-03-27 44 views
0

我有一個名爲Products的名稱空間的業務層。所以:Business.Products從動態用戶界面控件設置類型的屬性值

使用反射,我加載所有類型(基類除外,不是抽象的)到一個組合框,並期望用戶選擇一種類型(書,食品,醫藥,其他:所有繼承ProductBase類)並設置其屬性並添加到包含ProductBase列表的全局Order對象中。

到目前爲止,我從下拉菜單中選擇類型,下面的組框用對應的UI控件填充,複選框用於布爾道具,用於日期時間的DateTimePicker,用於自由輸入的TextBox等等。 (我將propertyinfo實例放在控件的btw屬性上)

當設置UI ctrls後添加新屬性時,我會爲所選類型創建一個新實例並開始設置其屬性。要找到更正的UI控件,我循環訪問groupBox中的控件,並使用帶有PropertyInfo實例的標籤道具。到目前爲止沒有問題找到相關的控制。但控件是不同的類型(我從一個返回System.WinForms.Control的私有方法返回控件),我需要訪問它的SelectedDate屬性,如果它的DatePicker,IsChecked道具,如果它的CheckBox等等。我不知道該怎麼做,坦率地說:)請幫助一個兄弟在這裏,謝謝你提前。和平!

注:我發現大多數控件都具有Text值,即使它的DatePicker文本值看起來像日期,但不認爲我真的可以使用它。

PS:這實際上是一個已知的面試問題,但我希望這種反射方法,以支持繼承結構和移動/添加/刪除屬性的各種未來的混亂。 在這裏檢查問題本身:http://codecrafter.blogspot.com/

回答

1

你使用過PropertyGrid控件嗎?它有這樣的東西已經出爐了。而且,這是典型的Windows環境這樣做的方式。它也與System.ComponentModel命名空間相互作用,所以你可以像編輯每個屬性標記的方式,描述,允許的值...

另外,請注意,反射速度有點慢,不要大規模地做這件事。