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

vb界面美化 模仿OFFICE选项卡风格 vb界面风格模仿OFFICE选项卡风格,挺好看的。。。。。很实用 立即下载

用C#和VB.NET实现VS.NET或Office XP风格的菜单

小气的神 2001.08.18

VS.NET或Office XP中的菜单都是非常漂亮的,反正我很喜欢。可惜VS.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的部分。好吧,让我们深入一点看看第二部分。

 

vb.net XP风格菜单 立即下载

相关推荐

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

VS.NET或Office XP中的菜单都是非常漂亮的,反正我很喜欢。可惜VS.NET没有带制作这种菜单的控件或组件,不知正式版本会不会提供一个模板和向导。至今还记得刚学计算机语言时自己用Turbo C制作菜单的感受,那些矩形框函数和象素操作的确很迷人,况且那时是如此的流行菜单。

C# excel工具栏菜单栏等操作

帮助和支持 登录 自己查找  询问社区 实时帮助 请选择您需要帮助的产品 Windows Internet Explorer Office

tangyanzhi1111的专栏 5412

VsNetMenu控件(OfficeXP风格菜单)

在VB开发环境中,您也许见多了XP菜单源码或控件,但是迄今为止您也许仍没有找到一款自适应目前所有操作系统、没有BUG、全面支持MDI窗口和系统菜单、完全模拟MS OfficeXP 风格的菜单控件,VsNetMenu就是这样一款您已经找了很久的控件。她是VB下实现OfficeXP风格菜单解决方案的终极控件,零代码轻松实现XP菜单效果。

C#:使用dsoframer.ocx控件实现内嵌office效果(详解)

C#:使用dsoframer.ocx控件实现内嵌office效果(详解)

了解—学习—进步—满足 5417

模仿office2007样式标题栏

类似office主题的窗体样式控件:Ribbon

C# 类似XP左侧可折叠式菜单(完整源码)

跟XP系统左侧可折叠式菜单一样,可以折叠、展开,可以自己定义颜色,自己研究吧,非常有用的一个源码,样式和outlook左侧菜单差不多! 我自己就在用,我用在erp项目里面,哈哈,很爽啊, 大概步骤: 1.在你的解决方案里添加“现有项目”,找到BSE.Windows.Forms.cspro添加进去→2.在你自己的工程里面引用刚才添加的项目→3.运行一下,完成,在左边工具箱中就有啦。 大概过程就是这样,反正死活就是要先引用。

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

用C#和VB.NET实现VS.NET或Office XP风格的菜单小气的神 2001.08.183. “MenuItemStyle”接口和VS.NET风格的菜单项 这个Project又将切换到C#语言。我是这样想的:先针对普通菜单、Office200风格、VS.NET风格三种情况定义一个统一的接口(interface),其中包括画Icon(DrawIcon)、画分割条(DrawSe

ccBoy的专栏 1759

C# 仿Office风格菜单控件源码及演示程序

C# 仿Office2003风格菜单控件源码,附带了测试演示程序,来自老外网站,界面语言英文,组件效果如上图示。   编译时请先编译Office Menu Control目录的内容,编译工具VS2005及以上版本,然后将编译生成的程序引用到Office Menus Test Project项目中,编译该项目即可。

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

用C#和VB.NET实现VS.NET或Office XP风格的菜单小气的神 2001.08.182.“Owner-drawn menus”技术这个例子是VB.NET语法的.我去掉了和Menu无关的Class,原因是错误太多,你会遇到类库和命名空间的移植性的问题:最多的是Beta1 System.WinForms 和Beta 2 的System.Windows.Froms的命名空间问

ccBoy的专栏 1491

相机图像质量研究(22)常见问题总结:CMOS期间对成像的影响--光学串扰

光学串扰是一个比较难以理解的光学现象,实际影响往往不大。一、光学串扰产生的原因通常是入射角度太大,光线在不同通道之间产生了混叠二、光学串扰产生的现象光学串扰容易导致迷宫纹。总结本节讲了光学串扰产生的原因,现象。

xiaoshixiu的专栏 1573

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4311

用C#和VS.NET实现Office XP风格的菜单

开始我会涉及到在Winform中最基本的一些菜单的概念。然后会有一个以前接触过的有关菜单的例子,它是For Beta 1的。老实说我没有想到Beta1 到Beta2有许多函数和命名空间发生了变化,以前我在Beta1中测试过这个例子,很顺利。这次在Beta2中会有许多错误,我提供了两个Project,一个是原来的Project的,一个是我修改后For Beta 2的。这种移植很枯燥,但可以很快熟悉新

lne818的专栏 1395

手把手教你用示波器实测CAN总线波形:快速区分高速、低速及常见故障

本文详细介绍了如何使用示波器实测CAN总线波形,快速区分高速CAN总线和低速CAN总线,并诊断常见故障。通过实战案例和波形分析,帮助工程师掌握CAN总线信号特征,提升故障排查效率,适用于汽车电子和工业控制领域。

weixin_33217202的博客 411

C# WinForm开发系列 - Open-Source Controls

原地址:http://www.cnblogs.com/peterzb/archive/2009/06/21/1507880.html

u014230987的专栏 1309

3步搞定专利数据爬取:用Selenium绕过国家知识产权局反爬(附完整代码)

本文详细介绍了3种高效获取专利数据的技术方案,重点解析了使用Selenium绕过国家知识产权局反爬的实战方法,并提供了完整代码示例。文章还探讨了Requests+lxml轻量级方案和混合技术策略,帮助开发者根据需求选择最佳数据爬取方案,特别适合需要专利统计数据的开发者参考。

weixin_29029995的博客 1112

FitzHugh-Nagumo 模型连续-MATLAB仿真

【代码】FitzHugh-Nagumo 模型连续-MATLAB仿真。

qq_43688618的博客 884

VB6中如何使用C#开发的WebService进行开发

VB6中如何使用C#开发的WebService进行开发                    伍华聪(http://wuhuacong.com.cn/)   1.         问题描述        在项目开发过程中,我们需要集成已有的权限管理系统,作为它本身的权限控制的模块。但是已有的权限管理系统是采用C#开发的,提供了WebService的权限访问接口,而开发项目是使用VB6开发的...

weixin_34259232的博客 247

华为CCA架构软件栈VehicleStack解析:3层服务化设计与AOS/VOS双核OS

本文深入解析华为CCA架构下的VehicleStack软件平台,重点介绍其三层服务化设计(硬件抽象层、服务框架层、应用层)与AOS/VOS双核操作系统协同机制。该架构通过计算与通信的深度融合,推动汽车电子电气架构向集中式发展,为智能汽车提供灵活、高效的软件定义汽车解决方案。

weixin_33491377的博客 324
上一篇: 价值上千美元的Visual Studio.NET β2的培训
下一篇: 用C#和VB.NET实现VS.NET或Office XP风格的菜单(二)
ccBoy
博客等级 码龄26年 6粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值