因WinForm動態菜單而產生的幾點疑惑
WinForm動態菜單產生疑惑事件起因:
WinForm入門學習時,利用設計器制作菜單,在以后的快速原型測試中,也用這種方式。但項目實際開發的時候,都是希望用代碼生成WinForm動態菜單。我們可以用數據庫,XML來平行地存儲菜單項,也可以用XML來層次地形象的存儲菜單。
雖然XML的層次結構,與菜單結構像極了,幾乎是“同構”的。但WinForm中的MenuStrip,并不支持數據綁定。
感嘆:在算法設計和業務操作的時候,我們希望面向對象的嚴格,但在組合算法,集成業務,粘合界面的時候,我們需要"宏","marco","#define"動態特性,如javascript, foxpro中那樣的靈活。
問題:
1. WinForm中,為什么就不能支持菜單的數據綁定和序列化?相比之下,Asp.Net快速開發中,數據綁定要支持的好得多,多不公平。
2. c#2太靜態了,以至于把菜單和事件聯系起來,太難了。有的用反射;有的對字符串進行判斷,大量使用switch(menuStripItem.Text) case...無可奈何的重復。希望C#能動態些,再動態些。
3. vs2010中,能動態添加字符串 表示的類和方法么,實現如下需求么?
我們希望在數據庫中有如下變量表:
變量類型 | 變量名稱 |
List<int> | list |
變量名稱 | 執行方法 | 參數類型列表 | 參數值列表 |
list | Add | int | 5 |
list | Add | int | 8 |
根據 數據庫,我們怎么把如字符串變成語句
"List<int> list = new List<int>;
list.Add(5);
list.Add(8);"
解答:對于不支持數據綁定,你可以自己寫一個方法,用DATATABLE存儲你的菜單結構,在菜單加載時你可以用XML化的DATATABLE進行加載,或者直接用DATATABLE進行加載。對于作者提出的第二個觀點,我覺得是作者對菜單的事件綁定不太熟悉所導致的,至于用switch case結構,是作者自己的設計問題,用工廠模式就可以解決。
【編輯推薦】