用C#和VB.NET实现Office XP风格的菜单(1)

发表于:2007-06-21来源:作者:点击数: 标签:
下一页 1 2 3 这篇文章中我会介绍有关在Framework SDK Beta 2 中制作自己风格的菜单,所以你最好已安装了Framework SDK Beta 2,VS.NET Beta 2 不一定是必须的。附带的Zip包中的例子都是VS.NET Project的。 整个的文章包括三部分: 1.Framework SDK Beta 2

下一页 1 2 3 

   

这篇文章中我会介绍有关在Framework SDK Beta 2 中制作自己风格的菜单,所以你最好已安装了Framework SDK Beta 2,VS.NET Beta 2 不一定是必须的。附带的Zip包中的例子都是VS.NET Project的。

整个的文章包括三部分:

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的部分。好吧,让我们深入一点看看第二部分。

原文转自:http://www.ltesting.net