VB.NET菜单设计初级入门[3]

如题所述

第1个回答  2022-11-01
   五.绘制个性化菜单

  先执行以下操作步骤 下列步骤是通过菜单编辑器设计一个简单的菜单 为后面重新绘制做基础

   启动Visual Studio Net

   选择菜单【文件】|【新建】|【项目】后 弹出【新建项目】对话框

   将【项目类型】设置为【Visual Basic项目】

   将【模板】设置为【Windows应用程序】

   在【名称】文本框中输入【自己画菜单】

   在【位置】的文本框中输入【E:\VS NET项目】 然后单击【确定】按钮 这样在 E:\VS NET项目 目录中就产生了名称为 自己画菜单 的文件夹 并在里面创建了名称为 自己画菜单 的项目文件

   把Visual Studio Net的当前窗口切换到【Form vb(设计)】窗口 并从【工具箱】中的【Windows窗体组件】选项卡中往Form 窗体中拖入下列组件

  一个MainMenu组件 名称为 MainMenu

   选中 MainMenu 组件 单击鼠标右键 在弹出的菜单中选择 编辑菜单 并按照图 所示界面设计菜单

图 【自己画菜单】项目设计界面之一

   此时保存上述步骤 并单击快捷键F 则得到图 所示界面

图 【自己画菜单】运行界面之一

  这样通过菜单编辑器就完成了一个非常普通的菜单 下面就对此菜单进行改造 在改造之前 要先设定项目中的三个MenuItem类实例的OwnerDraw属性值为 True 因为只有此属性值为 True 才会触发绘制菜单时所需要的DrawItem事件和MeasureItem事件 之后再在上面项目的基础上执行下一步操作

  把Visual Stuido Net的当前窗口切换到Form vb的代码编辑窗口 并在InitializeComponent过程之后添加下列代码 下列代码是绘制 文件 菜单项 其作用是改变 文件 菜单项的字体 大小和菜单项的 其具体的绘制方法请参考下列代码中的注释

Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs ) Handles MenuItem DrawItem Dim rfBound As RectangleF = New RectangleF ( e Bounds X e Bounds Y e Bounds Width e Bounds Height )  根据DrawItemEventArgs参数获得菜单项矩形区域并存储到RectangleF类型实例中 Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height )  根据DrawItemEventArgs参数获得菜单项矩形区域并存储到Rectangle类型实例中  Rectangle类型实例和RectangleF类型实例差不多 但在后面代码中绘制菜单的函数是有区别的  e Graphics FillRectangle(New SolidBrush(Color LightGreen) rfBound) 以LightGreen色彩填充MenuItem 菜单项对应的矩形区域 Dim s As MenuItem = CType ( sender MenuItem ) Dim s As String = s Text  获得MenuItem 菜单项的名称 Dim sfTemp As StringFormat = New StringFormat ( ) sfTemp Alignment = StringAlignment Center  设定要画的菜单名称的对齐方式 中间对齐 e Graphics DrawString ( s New Font ( 宋体 FontStyle Bold ) New SolidBrush ( Color Black ) rfBound sfTemp )  以中间对齐方式 指定字体 大小 在指定的矩形区域重画菜单 If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Then 根据菜单项的当前绘制状态来绘制菜单项 e Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound ) 对菜单项所在的矩形区域进行色彩填充 e Graphics DrawString ( s New Font ( 宋体 FontStyle Bold ) New SolidBrush ( Color Black ) rfBound sfTemp )  对菜单项名称绘制 End If e DrawFocusRectangle ( )  在 DrawItemEventArgs参数得到矩形范围内绘制聚焦框  e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound )  对菜单项的矩形区域绘制矩形框End Sub

  操作完成后 保存修改 此时再单击快捷键F 运行程序 可得到如图 所示的界面

图 【自己画菜单】运行界面之二

  可见绘制的 文件 菜单项并没有完全显示出来 并且后面的菜单项也没有显示 这是因为菜单项的显示区域并没有设定 而缺省的空间又不能完全显示造成的 设定菜单项的显示区域大小是通过MeasureItem事件来完成的 具体操作是在MenuItem 的DrawItem事件后添加下列代码 下列代码是是定义MenuItem 的MeasureItem事件 在此事件中设定菜单项的宽度(当然也可以设定高度等)

Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth =   设定菜单项的宽度End Sub

  保存上述修改后 单击快捷键F 运行程序可得到图 所示界面

图 【自己画菜单】运行界面之三

  可见 文件 菜单项就算绘制出来了 由于其他菜单项没有绘制处理 所以也未显示 其他菜单项的绘制方法和 文件 菜单项的绘制方法基本相似 以下是在上述完成的基础上 对其他菜单项进行绘制 从而得到图 所示菜单的具体实现步骤

图 【自己画菜单】运行界面之四

   在Form vb中的MenuItem 的MeasureItem事件处理程序之后添加下列代码 下列代码是定义MenuItem 的DrawItem事件 其功能是对 新建 菜单项重新绘制

Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs ) Handles MenuItem DrawItem Dim rfBound As RectangleF = New RectangleF ( e Bounds X e Bounds Y e Bounds Width e Bounds Height )   根据DrawItemEventArgs参数获得菜单项矩形区域并存储到RectangleF类型实例中 Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height )   根据DrawItemEventArgs参数获得菜单项矩形区域并存储到Rectangle类型实例中  Rectangle类型实例和RectangleF类型实例差不多 但在后面代码中绘制菜单的函数是有区别的 e Graphics FillRectangle ( New SolidBrush ( Color LightGray ) rfBound )  Dim s As MenuItem = CType ( sender MenuItem )  Dim s As String = s Text  获得菜单项对应的文本名称 Dim sfTemp As StringFormat = New StringFormat ( )  sfTemp Alignment = StringAlignment Center  设定文本在矩形区域的对齐方式 sfTemp LineAlignment = StringAlignment Center Dim rcText As RectangleF = rfBound rcText Width =  e Graphics DrawString ( s New Font ( 宋体 ) New SolidBrush ( Color Blue ) rcText sfTemp )  e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color LightGray ) ) rfBound )  If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Then  e Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound )   e Graphics DrawString ( s New Font ( 宋体 FontStyle Bold Or FontStyle Underline ) New SolidBrush ( Color Red ) rcText sfTemp )   e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound )   e DrawFocusRectangle ( )  End IfEnd Sub

   MenuItem 的DrawItem事件处理代码之后添加下列代码 下列代码是定义MenuItem 的MeasureItem事件 在此事件中实现设定 新建 菜单项的长度和高度

Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth =   设定菜单项的宽度 e ItemHeight =   设定菜单项的高度End Sub

   在完成上述操作步骤后 再在MenuItem 的MeasureItem事件处理程序之后添加下列代码 下列代码是定义MenuItem 的DrawItem事件 其功能是对 打开 菜单项重新绘制

Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs ) Handles MenuItem DrawItem  Dim rfBound As RectangleF = New RectangleF ( e Bounds X e Bounds Y e Bounds Width e Bounds Height )    根据DrawItemEventArgs参数获得菜单项矩形区域并存储到RectangleF类型实例中  Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height )    根据DrawItemEventArgs参数获得菜单项矩形区域并存储到Rectangle类型实例中   Rectangle类型实例和RectangleF类型实例差不多 但在后面代码中绘制菜单的函数是有区别的  Dim s As MenuItem = CType ( sender MenuItem )   Dim s As String = s Text  Dim sfTemp As StringFormat = New StringFormat ( )   sfTemp Alignment = StringAlignment Center  sfTemp LineAlignment = StringAlignment Center  Dim rcText As RectangleF = rfBound  rcText Width =   e Graphics DrawString ( s New Font ( Veranda ) New SolidBrush ( Color Blue ) rcText sfTemp )   e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color LightGray ) ) rfBound )   If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Then   e Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound )    e Graphics DrawString ( s New Font ( Veranda FontStyle Bold Or FontStyle Underline ) New SolidBrush ( Color Red ) rcText sfTemp )    e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound )    e DrawFocusRectangle ( )   End IfEnd Sub

   MenuItem 的DrawItem事件处理代码之后添加下列代码 下列代码是定义MenuItem 的MeasureItem事件 在此事件中实现设定 新建 菜单项的长度和高度

Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth =   设定菜单项的宽度 e ItemHeight =   设定菜单项的高度End Sub

  在上述步骤都正确完成后 本文介绍的手工绘制菜单就完成 此时单击快捷键F 运行 程序就可以得到图 所示的运行界面

   六.总结

  本文主要内容是介绍VB NET设计和创建菜单 其中不仅介绍了使用菜单设计器来静态设计菜单 还介绍了使用MainMenu类 MenuItem类和ContextMenu类动态创建菜单的实现方法 在动态创建时 首先要了解要创建的菜单类型 是下拉菜单 首先要创建一个MainMenu实例 是弹出菜单 首先要创建一个ContextMenu实例 然后根据菜单中的组成结构 即菜单项中的父子关系 创建出相应菜单 最后就是显示出菜单 如果是下拉菜单 指派给Form的Menu属性 如果是弹出菜单 指派给可视组件或Form的ContextMenu属性 这样动态创建菜单才能够显示出来 动态创建菜单的工作才算完成

  此外还介绍了在Visual Basic Net中绘制个性化菜单的实现方法和注意事项 在绘制个性化菜单时最重要的是掌握DrawItem事件和MeasureItem事件用法 及绘制菜单时所要使用到的方法 虽然本文绘制的菜单并不美观 但你可以通过本文介绍的方法来修改 从而实现更美观 更有个性的菜单 最后请记住 在绘制菜单时 首先把菜单项的 OwnerDraw 属性设定为 True

 

lishixinzhi/Article/program/net/201311/15454

VB.NET菜单设计初级入门[3]
把Visual Stuido Net的当前窗口切换到Form vb的代码编辑窗口 并在InitializeComponent过程之后添加下列代码 下列代码是绘制 文件 菜单项 其作用是改变 文件 菜单项的字体 大小和菜单项的 其具体的绘制方法请参考下列代码中的注释 Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Window...

vb.net的弹出式菜单怎么做
工具箱里有ContextMenu(.NET2.0以后名字有点变化,大概差不多),你加入窗体后就可以像编辑普通菜单那样编辑。编辑好后,选中你要添加菜单的控件。属性窗口里有个ContextMenu属性,在里面选你刚才建立的ContextMenu

vb.net怎么制作浮动菜单?用toolbar吗,还是其他的?vs2008怎么找不到tool...
可以做一个窗体,该窗体中放入你需要的菜单。这个窗体几个特殊设置:1。TOPmost设置为TRUE 2。Formborderstyle设置为none 3。showintaskbar设置为False 4。size设置为你的菜单大小 用的时候new一下就有啦!这样就相当于悬浮窗体了,细节自己研究吧!^_^ ...

vb.net如何动态选取单元格区域
方法如下:1、在工作表中,点击菜单栏开发工具,在其工具栏内,点击visualbasic。2、进入VBA编辑界面,点击菜单栏插入,在其下拉菜单中,选择模块。3、弹出模块编辑窗口后,在代码编辑窗口输入以下代码,Sub动态选择非空区域。4、在VBA窗口,点击运行按钮,非空单元格被选中。

在vb.net 程序计设中当在一个窗体上右击然后出现一个菜单是如何实现这一...
首先在工具箱添加一个叫contextmenu的控件 然后在需要右键菜单的窗体上,找到contextmenu这个属性,把它设置为你刚才添加的菜单

vb.net 怎么同时打开多个窗口
设计时创建 MDI 父窗体 创建 Windows 应用程序。在“属性”窗口中,将 IsMDIContainer 属性设置为 True。这将该窗体指定为子窗口的 MDI 容器。将 MainMenu 组件从“工具箱”拖到窗体上。创建一个 Text 属性设置为“文件(&F)”的顶级菜单项,且带有名为“新建(&N)”和“关闭(&C)”的子菜单项。

请帮我修改VB.net代码窗体风格
菜单栏→工具→选项→字体和颜色,如下图:比如背景色的修改,就得把“纯文本”的前景色设为白色,背景色设为黑色。Private Sub 这块,就是把“关键字”的前景色设为黄色。大致如下图:

用vb.net 怎样建立一个mdb数据库及一张表
首先在项目的VB.NET界面,使用菜单【项目】--【添加引用】--【COM】选择 Microsoft ADO Ext. 2.x for DDL and Security 然后单击【确定】,完成引用。完整代码如下:Imports ADOXPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) H...

高手帮忙做下VB.NET选择题,不会做..谢谢
1。当进入VB.NET集成环境,发现没有显示“工具箱”窗口,应选择 (视图)菜单的 选项,使“工具箱”窗口显示,并最好将其窗口的属性设置为(visable可见的 )。2.对象的属性是指对象的背景色,长度,名称等;对象的方法是指对属性所进行的操作,就是一个对象自己所属的函数,如对对象取整,使对象获得...

VB.net如何设置程序运行时最先打开的窗体?
你是不是用的Visual Studio来开发的?如果是,这样操作:打开 项目 菜单 中的 XXX属性,在弹出的属性页选择最上面那个 应用程序 标签,里面有个启动窗体,你选择一下就可以了。如果你不是用的visual Studio来开发的,那么可以考虑把另外一个窗口的visible属性先设置为false或者把你要显示的窗口改为对话...

相似回答
大家正在搜