在开发软件的菜单界面时,能按Windows所设定的规范进行,不仅能使所开发出的应用软件的菜单界面更美观丰富,而且能与Windows中各软件协调一致,使大量熟悉Windows操作的用户,一看菜单,就能根据平时的使用经验,触类旁通地知晓该应用软件的各功能和简捷的操作方法,增强软件的灵活性和可操作性。
以下以VB5.0的工具菜单栏(Tools)中的“菜单编辑器”和一个“学生档案管理软件”(主要有“文件”、“系统初始化” 、“年级”、“输入与查询”等菜单,分别完成报表打印、新建年级库、选年级、以及数据库数据的输入与查询等)为例,说明Windows应用软件菜单设计的一些规则:
一、暂时不可操作的菜单命令项一般要屏蔽变灰
Windows菜单中有一些菜单项是以变灰的形式出现的,并用虚线字符来显示,这一类的命令表示当前不可用,也就是说,执行此命令的条件当前还不具备。例如,在学生档案管理软件中,初始的“输入与查询”菜单为灰,因为在没有选中“年级”的情况下,系统将不知要查询哪个年级的学生资料。在图1中设计时,点击“输入与查询”菜单条的“有效(E)”属性,改变其默认的“有效”为“无效”,然后设计在“年级”菜单中各年级的Click事件中传递所选中的年级信息给“输入与查询”模块后改变后者的“有效”属性值,让其可操作:
Private Sub mnu98dz_Click()
Transfer = "c:\dagl\98dz.mdb"
mnuFind.Enabled = True
End Sub
二、正在起作用的菜单命令旁打上选中标记(√)
Windows中有一些命令是触发式的,打勾号表明该命令正在起作用,否则表明不起作用,可通过点击,反复切换。例如,在上述所举的学生档案管理软件中,当选择了某一年级时,系统就在对应年级菜单前打上“√”,表明正在操作的是此年级的数据库。要做到这一点,只要把菜单编辑器中相应菜单条的“复选(C)"框选中即可,然后在菜单的驱动事件加入如下语句来切换该属性:mnu98dz.Checked=not mnu98dz.Checked
三、为命令选项设置访问键(Access key)
菜单项中带有下划线的字母,称为该命令的访问键,是为了方便使用键盘的用户而设置的,按Alt键和该字母时即可打开该菜单,增加访问键只要在菜单编辑器的“标题(P)”框中,在要让其成为访问键的字母前加“&”即可,当然,访问键最好不要重复,否则系统只认定第一个有效。
四、为命令选项增加快捷键(Shortcut Key)
某些菜单命令的右边有一组合键,称为该命令的快捷键,可以不打开菜单而直接按快捷键来选择执行此命令。为一个命令项增加一个快捷键,可在菜单编辑器中的“快捷键(S)”列表框中为该命令项分配一个,列表中一个快捷键只能被分配一次,否则系统会拒绝接受。
五、在要弹出对话框的命令选项后增加省略号(...)提示用户
Windows中,如果命令项后面有省略号(...),表明选择此命令将引出一个对话框,从对话框系统要求用户提供更多执行该命令所需的信息,在设计时只要在会引出对话框的菜单项的标题后增加“(...)"提示即可。
六、用右指向的箭头(→),来指引用户选择此项将引出级联菜单(Cascading Menu)
级联菜单即所谓的子菜单,在VB中箭头由系统根据菜单编辑器中设计菜单大纲时所安排的“缩进”度而自动实现的,因此,关键是在设计菜单时合理安排大纲中各菜单项上下级的逻辑关系,在VB中最多可以有四级子菜单。
七、对相关的命令用分隔条(Separate Bar)进行分组
为了让用户迅速地在菜单中找到他要执行的命令项,有必要对菜单中相关的一组命令用分隔条进行分组,如文件菜单中,把有关打印输出的一组命令:“页面设置”、“打印预览”、“打印”等用分隔条醒目地进行分隔。这只要在需要进行分组的命令之间插入一个特殊的命令条,该命令条的“标题”为“-”,而“名称”任意,因为在程序中一般不会引用此命令的名称。
八、建立动态菜单,提高软件的灵活性
动态菜单即运行时会伸缩的菜单,Windows中有许多软件的“文件”菜单中都具有记忆最近操作过的几个文档名的功能,在本文所举例的学生档案管理软件中,因为每年都会有新的学生到校,在形成新的年级时,要在“年级”菜单中动态地增加新的年级名称以供选择和查询,这首先要在设计时生成菜单命令的控件数组(Menu Control Array),在菜单的编辑器中加入一个菜单选项,设其Index属性设置为0,然后可以加入名称相同(在本例中名称为MnuNj),Index值相邻递增的菜单选项(比如加入10个),设计时让它们标题框均为空,留作日后引用填入新年级名,并设这些备用菜单条的“可见”属性为无效,即目前不可见。在有建立和删年级库功能的“系统初始化”菜单驱动事件中引用这个数组名和索引值在“输入与查询”中动态地加进新的年级名选项,并让其可见或不可见(在删除时):
Private AddMenu_Click()
Counter=counter+1
Nj=Nj+1 ’Nj是一个模块级变量,初值为1998
MnuNj(counter).Caption= Nj & "年级"
MnuNj(counter).Visible=Ture
End Sub
Windows中许多应用程序的“文件"菜单记住最近使使过的文件名的实际方法与此类似。
九、生成弹出式菜单,增强软件的可操作性
有时为了方便用户需要,为一些最常用的命令建立右键弹出式快捷菜单,这种菜单的前期设计和普通菜单一样,不同的是一般要先点击“可见(P)”框,让此菜单不可见,然后在窗体的MouseDown或MouseUp事件中引用PopupMenu方法来实现在窗体上按下鼠标右键时弹出此菜单:
Private Sub MdiForm1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If button=2 the ’MnuEdit为制作的要弹出的菜单
Popupmenu MnuEdit
End Sub
PopupMenu方法将忽略初始设置的“不可见”属性。
使用Windows下的其他软件开发工具设计菜单时,情形与之类似。
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比