当前位置: 首页 > news >正文

Visual Basic 动态定制菜单

有时候需要设计创建的菜单能动态响应运行时的条件,如菜单项的动作在某些点上不适当时,通过使其失效可防止对该菜单项的选取。例如,在Word应用程序中,若剪贴板上没有任何文本,则“编辑”菜单中的“粘贴”菜单项变为灰色,不能被使用。

1. 创建菜单控件数组

既然Visual Basic将菜单项视为控件,因此就可以运用控件数组管理菜单项,即菜单控件数组。应用菜单控件数组的好处主要有两个:

  • 用于动态增删菜单项
  • 简化编程,用一段过程代码处理多个菜单项。

比如,可将例7.2中的“字体属性”菜单改为控件数组形式,需在菜单编辑器中进行如下设置:

(1) 保持“字体属性”菜单项中各属性值不变,并注意其“索引”框必须为空。

(2) 把“宋体”菜单项的名称改为mnuFont_Slkh,并将其“索引”设为0,即数组中的第1个元素。

(3) 把“隶书”菜单项的名称设为mnuFont_Slkh(与“宋体”菜单项名称相同),并将其“索引”设为1。

(4) 重复第3步,分别把“楷体”、“黑体”菜单项名称改为mnuFont_Slkh,“索引”值分别设为2,3。

单击“确定”按钮,返回到窗体设计窗口。则字体属性菜单的Click事件代码为:

Private Sub mnuFont_Slkh_Click(Index As Integer)

Select Case Index

   Case 0

      Text1.FontName = "宋体"

   Case 1

      Text1.FontName = "隶书"

   Case 2

      Text1.FontName = "楷体_GB2312"

   Case 3

      Text1.FontName = "黑体"

End Select

End Sub

需要注意的是菜单控件数组的各元素在菜单项显示区中必须是连续的,而且在同一缩进级上。创建菜单控件数组时,要把菜单中出现的分隔符也包括进去。

2. 使菜单命令有效或无效

所有的菜单控件都具有Enabled属性,当这个属性设为False时,菜单命令无效使它不响应动作。当Enabled属性设为False时,快捷键的访问也无效。一个无效的菜单项变为灰色,如图7.6所示。

7.6  无效的菜单项

下列语句可使“编辑”菜单上的“粘贴”菜单项无效:

mnuEdit_Paste.Enabled = False

菜单标题的无效使得整个菜单无效,如下列代码将使“编辑”菜单无效:

mnuEdit.Enabled = False

3. 隐藏菜单

如果将菜单的Visible属性设置为False,则在运行时和开发环境中菜单及其所有子菜单都将被隐藏。当下拉菜单中的一个菜单项不可见时,其余的菜单项上移以填补空出的空间。如果菜单条上的菜单不可见,则菜单条上其余的控件会左移以填补该空间。

例如,创建两个单独的File菜单,把第一个File菜单最上面的菜单项命名为mnuFile1,把第二个File菜单命名为mnuFile2,两个菜单可以有相同的Caption属性,但他们必须有唯一的Name属性。无论在开发环境还是在运行中,切换这两个顶层菜单项的Visible属性,使一个可见,另一个隐藏。

利用该项技术,用户可以很容易地用替换集换出整个菜单集。如图7.7所示,显示了在同一窗体上的两个单独的菜单集,它们分别在单击“变换菜单”命令按钮前后出现。

     

图7.7  同一窗体上的两个不同菜单

这种效果可以用下面的代码实现:

Private Sub Command1_Click()

mnuColor.Visible = Not mnuColor.Visible

mnuTools.Visible = Not mnuTools.Visible

mnuEdit.Visible = Not mnuEdit.Visible

mnuOption.Visible = Not mnuOption.Visible

End Sub

Private Sub Form_Load()

mnuColor.Visible = False

mnuTools.Visible = False

End Sub

注意,使菜单控件不可见也产生使之无效的作用,通过菜单、热键或快捷键都无法访问该控件。

4. 运行时添加菜单控件

运行时可以添加菜单项,例如,Visual Basic的“文件”菜单就是根据打开的工程名添加菜单,显示出最近打开的工程名。

运行时添加菜单项必须使用控件数组。为了在运行时可以添加菜单项,在设计时必须设置该菜单项的Index属性为0,使它自动成为控件数的一个元素,同时也创建了一个在运行不可见的分隔条。当运行时用户第一次存储一个文件时,这个分隔条就会变得可见,且第一个文件名被加到该菜单上。运行时每存储一个文件,则会再装入一个菜单控件到该数组中,从而使该菜单增长。运行时所创建的控件可以使用Hide方法或者设置该控件的Visible属性为False来隐藏。如果要从内存中删除一个控件数组中的控件,可使用Unload语句。

例如,在编辑文件菜单时,可以在“另存为”菜单项后面添加一个菜单控件数组mnu_Filehistory(0)mnu_Filehistory(4),分别代表分隔线及4个历史记录,并将它们的Visible属性设为False。然后,在“保存”单击事件过程中编写如下代码:

CommonDialog1.ShowSave

If CommonDialog1.FileName <> "" Then

   mnu_Filehistory(0).Visible = True

   Num = Num + 1

   If Num > 4 Then

      Num = 1

      mnu_Filehistory(Num).Visible = True

      mnu_Filehistory(Num).Caption = CommonDialog1.FileName

   Else

      mnu_Filehistory(Num).Visible = True

      mnu_Filehistory(Num).Caption = CommonDialog1.FileName

   End If

End If

运行程序时,每保存一个文件,菜单项就会自动添加一个历史记录,如图7.8所示。

7.8  运行时添加菜单项

http://www.dtcms.com/a/558354.html

相关文章:

  • 2025年--Lc229-32. 最长有效括号(栈)-Java版
  • 时移世易,篡改天机:吾以 Go 语令 Windows 文件“返老还童“记
  • 做网站的软件是什么网站开发需要逻辑吗
  • 海阳做网站网站建设需要工作计划
  • 通信工程网站建设primitive technology wordpress
  • 响应式网站的费用佛山网站建设邓先生
  • 做单本小说网站怎么样企业网站的建设报价
  • 计算机操作系统:设备驱动程序
  • 长春网站排名提升app软件开发专业公司
  • 网站做关键词首页建设银行网站查余额查询
  • 钢琴演变史
  • 企业建设门户网站的目的国外免费建站网站搭建
  • 【开题答辩全过程】以 二手手机收售系统为例,包含答辩的问题和答案
  • google搜索优化优化seo深圳
  • 为公司建立网站怎么做淘宝网站赚钱
  • springboot默认线程池配置
  • 郑州h5网站建设为新公司取名免费
  • 河南襄县做网站的公司店面设计包括哪些内容
  • 基础微网站开发价位青岛市住房和城乡建设局网站
  • 珠海模板开发建站把自己做的动画传到哪个网站上
  • 京东商城 网站建设山东济铁工程建设集团有限公司网站
  • 文本网站代码空两格怎么做网站上传权限
  • 建设派网站建立自己网站的好处
  • C++笔记(面向对象)静态联编和动态联编
  • 【递归、回溯、搜索】专题六:记忆化搜索
  • 网站页面描述怎么写咸阳鑫承网站建设
  • 如何在百度举报网站桂林市临桂区
  • 一个可以做行程的网站网站虚拟主机1g
  • 网站标题和关键词一样网页版微信登录不了怎么解决
  • 2015年做啥网站能致富wordpress 导出export.php