淮阴尚都汇规划:VB -菜单界面设计

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 13:49:08

任何一个应用程序,都需要通过各种命令来达成某项功能,而这些命令,大多数是通过程序的菜单来实现的,如我们常常用到的记事本的菜单

 


图一

VB 提供了一个菜单编辑器,专门用来制作各式各样的菜单,它在标准工具栏中的图标如图二:


图二

双击该图标,弹出如图三的窗口,通过这个窗口,我们就可以制作菜单了。


图三

当然,程序光是有菜单还不行,它只是为用户提供了便捷的操作接口,程序功能的最终实行,还必须通过给这些菜单输入复杂的程序才能得以实现。

下面,我们以 Windows 自带的笔记本为例,介绍如何用 VB 制作菜单。

一、菜单制作:
1、双击如图二的菜单编辑器图标,然后弹出如图三的编辑窗口。

2、标题:显示在菜单中的文本,这里,我们输入“文件(&F)”字样。

(&F) 是什么东西?这是为了方便用户使用键盘操作菜单,当程序运行时,(&) 字样不会出现,而是在字母 F 下加上一条横线,这表示,只要用户在按住 Alt 键的同时再按下 F 键,就相当于用鼠标点击“文件”这个菜单命令了。也就是说,文件菜单的快捷键是 Alt+F 。

名称:本菜单在程序中的名称,主要用作程序调用,因此记得用英文名,另外,名字最好一目了然,这里,我们将“文件”菜单命名为 MenuFile 。

“文件”菜单制作完毕,如图四:


图四

3、点击菜单编辑器上的“下一个”按钮,制作下一个菜单,这时,我们看到,编辑区域自动提到了下一行,如图五:


图五

点击向右按钮,本行前面出现了四个小点,表示本菜单降了一级,是二级菜单(依此类推,如果要制作三级菜单,只需要再点一下向右按钮进行降级就行了)。然后用第二步的方法,制作“新建”(MenuNew)、“打开”(MenuOpen)、“保存”(MenuSave)、“另存为”(MenuSaveOther)菜单,结果如图六:


图六

上面讲到了用 & 符号制作快捷键的方法,这里我们再使用 VB 菜单编辑器中的“快捷键”定制方法制作快捷键。

找到“新建”菜单,先在“新建(&N)”字样后面添加六个空格,以便后面显示的快捷键跟菜单名之间有点空隙,然后在快捷键下拉列表中选择 Ctrl+N ,这表示在按住 Ctrl 键的同时按 N 键就能使用“新建”命令了,如下图:

4、制作菜单分隔线:
“另存为”菜单下面是条分隔线,那么分隔线如何表示呢?很简单,只需在“标题”框中输入“-” 就行了,命名为 MenuSperate1 ,然后点按“下一个”按钮制作下面的菜单。如图七:


图七

5、同理可做“页面设置”(MenuPage)、“打印”(MenuPrint)、“分隔线二”(MenuSeprate2)、“退出菜单”(MenuQuit),如图八:


图八

6、制作“编辑”菜单:
由于“编辑菜单”是一级菜单,所以在完成“退出”菜单,并点按“下一个”按钮后,别忘了点按向左按钮,将当前菜单进行升级,这时可以看到,本行前面的四个小点消失了,如图九:


图九

7、根据前面学到的知识,我们制作“编辑”(MenuEdit)、“撤消”(MenuUndo)、“分隔条三”(MenuSeprate3)、“剪切”(MenuCut)、“复制”(MenuCopy)、“粘贴”(MenuPaste)、“删除”(MenuDel)、“分隔条四”(MenuSeprate4)、“全选”(MenuSelectAll)、“时间/日期”(MenuDate)、“分隔条五”(MenuSeprate5)、“自动换行”(MenuWrap)、“设置字体”(MenuFont)菜单。如图十:


图十

8、添加 RichText 控件:
最后在窗体内添加一个 RichText 控件,结果如图十一:


图十一

在默认的工具箱面板中,RichText 控件没有罗列出来,大家可以用鼠标右键点击工具箱面板,在弹出的面板中选择“部件”,然后在弹出的窗口中找到“Microsoft Rich Textbox Control 6.0”,勾选本控件的复选框,最后“确定”就行了,如图十二:


图十二

二、菜单属性设置:
对各个菜单的属性设置,可以在制作菜单的过程中进行,也可以在菜单设计完毕后集中进行处理。

1、菜单的“有效”性:
只有当菜单处于“有效”状态时才能被使用。

对于一个新的空白文件来说,撤消、剪切、复制、粘贴的命令缺少操作对象,所以在初始状态下,它们应该是“无效”的。

打开菜单编辑器,找到“撤消”菜单,然后将“有效”复选框前的勾去掉,这样,“撤消”菜单无效了,如图十三:


图十三

同理,将“剪切”、“复制”、“粘贴”三个菜单变为“无效”。

2、复选菜单:
在记事本中,“自动换行”可以对文本的显示进行换行控制,默认状态为“非自动换行”模式,点击一次则启动“自动换行”模式,再点击一次就取消“自动换行”,象这种菜单,我们称为“复选菜单”。

复选菜单的制作非常简单,只需找到要作为复选菜单的那个菜单,然后勾选“复选”按钮就行了,如图十四:


图十四

但是,此时的复选按钮还不健全,需要代码的支持方能正常使用,具体情况在下一节的示例中讲述。

有如图一这样一个小程序,通过“菜单”下的色彩设置,可以将窗体的背景分别改为“红”、“绿”、“蓝”色,点击“菜单”下的“退出”,则自动退出程序。


图一

一、界面设置:
根据第一节学到的知识,我们制作一个如图二的菜单。


图二

需要注意的是,“菜单”为一级,“色彩设置”、“退出”为二级、“红色”、“绿色”、“蓝色”为三级菜单,根据图二中每行前面点的多少可以判断出来。

另外,不要忘记勾选“红”、“绿”、“蓝”三种色彩的菜单前的“复选”选项。

二、输入程序代码:
1、退出菜单:
在 VB 中,End 是专门用来退出程序的命令,因此,我们在“退出菜单”中输入如下代码:

Private Sub MenuQuit_Click()
End
End Sub

这样,只要点击本菜单,自动退出程序。

2、复选菜单的判断:
在 VB 中,可以用如下语法对复选菜单进行判断:

复选菜单名.Checked = True/False

当值为 True ,复选菜单被选中;值为 False ,菜单未被选中。

3、我们要让程序在初始状态下保持本色,在 Form 的装入事件中输入以下代码:

Private Sub Form_Load()
MenuRed.Checked = False
MenuGreen.Checked = False
MenuBlue.Checked = False
End Sub

这段程序,让三个复选菜单都处于未被选中状态(在程序运行时起作用,在设计过程中,三个复选菜单始终是处于选中状态)。

4、当按下红色菜单(MenuRed):

Private Sub MenuRed_Click()
MenuRed.Checked = True
MenuGreen.Checked = False
MenuBlue.Checked = False
Form1.BackColor = vbRed
End Sub

这段代码,让“红色菜单”处于选中状态,而其他颜色的菜单处于未被选中状态,同时将窗体的背景色变为红色(VbRed)。

5、当按下绿色菜单(MenuGreen):

Private Sub MenuGreen_Click()
MenuRed.Checked = False
MenuGreen.Checked = True
MenuBlue.Checked = False
Form1.BackColor = vbGreen
End Sub

绿色菜单处于选中状态,其他菜单非选中,同时窗体背景色变为绿色。

6、按下蓝色菜单:

Private Sub MenuBlue_Click()
MenuRed.Checked = False
MenuGreen.Checked = False
MenuBlue.Checked = True
Form1.BackColor = vbBlue
End Sub

蓝色菜单处于选中状态,其他菜单非选中,同时窗体背景变为蓝色。

7、最后按 F5 键,如何,程序正常运行了吧?

三、联想:
本节我们讲到复选菜单是如何对选中进行判断的,那就是看 Checked 值是否为 True 。

前面我们学过单选按钮(OptionBUtton)、复选按钮(CheckBox),它们也有是否被选中的判断,那么,它们有什么不同呢?

注意,单选按钮是否选中的判断:
单选按钮名.Value = True/False 。由于单选按钮只能二选一或多选一,所以往往不需判断,只需响应 Click 事件就行了。

复选按钮的判断:

复选按钮名.Value = 0/1/2 。由于复选按钮可以一次多选,所以对它的判断最为复杂,常常需要用到诸如 If……Then 等条件语句进行判断。但它跟复选菜单不同的是,复选菜单常常只能多中选一,比如上面例子中,选择了“红色菜单”就不能选择“蓝色菜单”,等等。 记不清楚的朋友可以回头复习一下,此处不再赘述。

我们在上一节示例的基础上,来制作如图一的小程序,每点击一次“增加信息”命令,菜单上会自动增加一个“信息”菜单,每点击一次“清除菜单”命令,程序自动清除当前信息菜单;当菜单回复原样,即只剩“信息”菜单时,“清除菜单”无效。


图一

一、界面设置:
在第二节最终结果的基础上,创建如图一的界面,需要注意的是,“信息”菜单(MenuHint)必须在前面的“索引”框中填入数字 0,如图二:


图二

在程序中,只要在“索引”文本中输入了数字,就代表这个菜单成为了一个“菜单数组”,通过这个“菜单数组”可以实现菜单的动态增加与清除。

二、程序代码:
1、为“信息菜单”指定变量:
对于增加或清除菜单命令,我们可以这样看:原始的“信息菜单”为 MenuHint(0) ,这也是索引值为 0 的意义所在;那么增加的一个信息菜单就应该为 MenuHint(1),再增加一个,就应该为 MenuHint(2),依此类推;清除一个信息菜单也类似,如果当前是 MenuHint(X),那么清除一个后应该为 MenuHint(X-1),依此类推。

指定索引值为 HintNumber ,那么增加时,应该是 HintNumber = HintNumber + 1 ;清除时,应该是 HintNumber = HintNumber -1 。

2、变量的作用域:
一个变量的作用域倒底有多大?这得由变量的类型来决定。当一个变量只在某一个过程或事件(如某个按钮的单击事件)中起作用,那么它就是局部变量,可以在事件中直接定义;当一个变量可以在整个窗体内供使用,那么它可能是窗体层变量或全局变量,凡是在这个窗体上的事件都可以对这个变量进行引用,这种变量只能在“通用”过程中进行“声明”。

因为 HintNumber 既要在“增加菜单”事件中引用,又要在“清除菜单”事件中引用,所以我们将它作为窗体层变量在“通用”过程的“声明”中对其进行定义,如图三:


图三

图三中的代码如下:

Dim HintNumber As Integer

3、在窗体的载入事件中让 HintNumber 为初始值 0 ,再加上原来的代码,结果如图四:


图四

4、“增加信息”菜单的 Click 事件:
Private Sub MenuAdd_Click()
HintNumber = HintNumber + 1
Load MenuHint(HintNumber)
MenuHint(HintNumber).Caption = "信息" & HintNumber
End Sub

上面程序的意义在于,先计算 HintNumber + 1 并将结果赋给新的 HintNumber ,然后通过 Load 命令打开一个新菜单 MenuHint(HintNumber) ,并让新菜单的标题变成“信息X”,其中,X是数字,表示这是第几个信息菜单。

5、“清除信息”菜单的 Click 事件:
Private Sub MenuClear_Click()
If HintNumber = 0 Then
Exit Sub
Else
Unload MenuHint(HintNumber)
HintNumber = HintNumber - 1
End If
End Sub

上面的代码,先对 HintNumber 值进行判断,当 HintNumber 为 0 即程序的初始状态时,直接退出当前过程(Exit Sub 是退出当前过程的命令,切记);如果 HintNumber 不为 0 ,那么卸载索引值最高的信息菜单,即 MenuHint(HintNumber) ,然后讲算 HintNumber -1 并将结果赋给新的 HintNumber ,并最后退出条件判断。

6、“清除信息”菜单的“有效性”:
如果程序处于初始状态,即“信息菜单”的索引值为 0 ,那么“清除信息”命令无效,否则有效。由于只有先点击“帮助菜单(MenuHelp)”才能弹出“清除信息菜单(MenuClear)”,所以可以在 MenuHelp 的点击事件中输入以下代码:

Private Sub MenuHelp_Click()
If HintNumber = 0 Then
MenuClear.Enabled = False
Else
MenuClear.Enabled = True
End If
End Sub

7、测试:
按键盘上的 F5 键,对程序进行最终的测试。

三、提醒:
本节最重要的是掌握诸如 HintNumber 这种辅助变量,它将鼠标的点击动作用数字的形式加以诠释,通过值的加减来完成菜单的动态增加与清除。

这种辅助变量的使用,在 VB 中几乎是无处不在的,如前面我们在讲 For……Next……的语法时说的作为累加器的变量。

另外,从上面的例子我们可以看出, Load/Unload 不仅适用于窗体的装入与卸载,同时还适用于菜单的装入与卸载。