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