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