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