国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用C#和VB.NET實現VS.NET或Office XP風格的菜單(一)

2024-07-10 13:00:26
字體:
來源:轉載
供稿:網友
用c#和vb.net實現vs.net或office xp風格的菜單

小氣的神 2001.08.18

vs.net或office xp中的菜單都是非常漂亮的,反正我很喜歡??上s.net沒有帶制作這種菜單的控件或組件,不知正式版本會不會提供一個模板和向導。至今還記得剛學計算機語言時自己用turbo c制作菜單的感受,那些矩形框函數和象素操作的確很迷人,況且那時是如此的流行菜單。

這篇文章中我會介紹有關在framework sdk beta 2 中制作自己風格的菜單,所以你最好已安裝了framework sdk beta 2,vs.net beta 2 不一定是必須的。附帶的zip包中的例子都是vs.net project的。

整個的文章包括三部分:

開始我會涉及到在winform中最基本的一些菜單的概念。

然后會有一個以前接觸過的有關菜單的例子,它是for beta 1的。老實說我沒有想到beta1 到beta2有許多函數和命名空間發生了變化,以前我在beta1中測試過這個例子,很順利。這次在beta2中會有許多錯誤,我提供了兩個project,一個是原來的project的,一個是我修改后for beta 2的。這種移植很枯燥,但可以很快熟悉新的beta2的類庫和函數,show出來的菜單還不錯,感覺是office2000風格的菜單。如果你有興趣可以試一試這個過程,會獲益非淺的,這個例子還包括按鈕的,原來的作者其實是在demo控件的“owner-drawn menus”技術;不過我只對菜單部分感興趣。

最后一部分是制作vs.net或xp風格的例子,上面那個例子的效果不能使我完全滿意,然后我重新寫了另外一個,不過我對最后的結果還不是很滿意,因為我的沒有上一個例子那么完整,例子中我只顯示了這個風格的菜單,對于事件響應、狀態欄更新、tooltips、菜單的狀態(enabled state)等處理都沒有考慮,我把這些歸結為時間問題,并承諾自己下次把它做得更好。



1.framework sdk beta 2中菜單分成兩類一類是普通的菜單叫:mainmenu,在vs.net的toolsbox中有這樣一個對應的菜單控件,拖下它到你的窗體中,設置一下屬性就可以所見所得了,這個版本的比vs.studio98 系列的要好用和漂亮的多。另一類叫:contextmenu菜單,也就是常用的彈出菜單。對于vb6來說所有的普通菜單在vs.net中是可以兼容和自動升級成mainmenu類型的菜單,但對于popmenu的菜單是不能轉換成contextmenu類型的菜單,你必須自己重新修改代碼實現。這里我們主要是針對mainmenu的,其實原理一樣。

最簡單的菜單你可以這樣做:

using system;

using system.windows.forms;



public class frmvb6 : form {



private mainmenu mumain ; // mainmenu



public static int main(string[] args) {

application.run(new frmvb6());

return 0;

}



public frmvb6() {



// the following code sets up the form properties.

this.text = "form1";

this.height = 213 + systeminformation.captionheight;

this.width = 312;

this.startposition = formstartposition.windowsdefaultlocation;



menuitem mitemfile = new menuitem() ;

mitemfile.text = "&file" ;

menuitem mitemexit = new menuitem() ;

mitemexit.text = "e&xit" ;



mumain = new mainmenu() ;

mumain.menuitems.add( mitemfile ) ;

mumain.menuitems.add( mitemexit) ;

this.menu = mumain ;



}

}

手工方式保存它為一個.cs文件然后在編譯它:

csc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll form1menu.cs

vs.net下只用new一個新的winform項目,然后在默認窗體中放入mainmenu控件,然后設置完屬性,f5就可以了,完全不用一行代碼。

如果要生成一個主菜單和一個菜單的子菜單項目,主要是menuitems.addrange的方法,看下面的代碼:

this.mainmenu1 = new system.windows.forms.mainmenu();

this.menuitem1 = new system.windows.forms.menuitem();

this.menuitem2 = new system.windows.forms.menuitem();

this.menuitem3 = new system.windows.forms.menuitem();

this.menuitem4 = new system.windows.forms.menuitem();

// mainmenu1

this.mainmenu1.menuitems.addrange(new system.windows.forms.menuitem[] {

this.menuitem1, this.menuitem2});



// menuitem1

this.menuitem1.index = 0;

this.menuitem1.menuitems.addrange(new system.windows.forms.menuitem[] {

this.menuitem3, this.menuitem4});

this.menuitem1.index = 0 ;

this.menuitem1.text = "&file";



// menuitem2

this.menuitem2.index = 1;

this.menuitem2.text = "help";



// menuitem3

this.menuitem3.index = 0;

this.menuitem3.text = "open";

this.menuitem3.click += new system.eventhandler(this.menuitem3_click);



// menuitem4

this.menuitem4.index = 1;

this.menuitem4.text = "exit";

this.menuitem4.click += new system.eventhandler(this.menuitem4_click);



this.menu = this.mainmenu1;

如代碼所示menuitem1(file)和menuitem2(help)被addrange到mainmenu1中成為了頂級的菜單,menuitem3(open)和menuitem4(exit)被addrange到menuitem1(file)中成為了file菜單下的子菜單項。

this.menuitem3.click += new system.eventhandler(this.menuitem3_click);表明menuitem3點擊時激發的事件處理程序,一般的事件處理程序象下面這樣:

private void menuitem3_click(object sender, system.eventargs e)

{

messagebox.show ( " my click open" ) ;

}



我們關心的其實是menuitem,讓它用我們的方式畫出有vs.net或xp風格的菜單就可以了,更簡單的說就是實現一個menuitem的繼承類,擴展它draw的部分。好吧,讓我們深入一點看看第二部分。

國內最大的酷站演示中心!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庐江县| 阳西县| 宜州市| 河东区| 梁平县| 清水县| 罗山县| 浙江省| 岳阳县| 宜兴市| 精河县| 红桥区| 厦门市| 阿勒泰市| 克东县| 翁源县| 什邡市| 牙克石市| 平和县| 峨边| 松阳县| 内丘县| 商洛市| 石首市| 旬阳县| 山阴县| 芒康县| 根河市| 榆中县| 大兴区| 班玛县| 兰坪| 永春县| 济南市| 河曲县| 锦屏县| 阜平县| 明光市| 清远市| 永靖县| 武平县|