荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: 利用VB创建WINDOWS下的动态菜单
发信站: BBS 荔园晨风站 (Wed Jan 27 17:48:49 1999), 转信
菜单是Windows中的一种重要资源,它将应用程序中众多的操作命令
明确分类,同时结合多级下拉与对话窗口,使其操作非常方便,加之它
可以节省大量的屏幕空间等优点,使得现在的Windows软件无一例外地
运用了菜单资源。而动态菜单是对常规菜单的一种扩展,它可根据用
户的操作内容动态地添加与之有关的菜单项或删除无关的菜单项,于
是,菜单中的选项不再是固定不变的了。例如:在许多软件的File菜单
中可以自动地添加并改变菜单项,用以保存最近几次调用过的文件名
。
下面本文将以VB4.0语言为开发工具,通过一个程序设计实例具体
介绍如何在自己的Win dows程序中开发出动态菜单。
VB提供给程序设计人员一个如图1所示的菜单生成器,用该生成器
在程序中加入菜单项是十分容易且十分愉快的事情——我们只需填写
一张"表格",就可以产生一个支持多级下拉、热键操作等功能齐全的W
indows标准菜单。
利用菜单生成器还可以产生包含有菜单控制项数组的菜单。菜单
控制项数组是由一个或多个菜单项组成,这些菜单项共享事件过程和
一个公用的名字。每个菜单项都具有唯一的索引值(Index),但所有的
菜单项都有相同的Name值。建立控制项数组是生成动态菜单的前提,
程序设计者可以指定多个相近的菜单项为一个控制项数组,然后,就可
以在运行期间,通过操作菜单控制项数组动态地加入或删除菜单项了
。
创建具有多个菜单控制项数组的步骤为:
1.创建一个菜单项;
2.在Index文字框中输入一个数值,这个值代表该菜单项在控制数
组中的位置;
3.再创建具有相同控制项名字(NAME)的另一个菜单项: 图1 VB4.
0中菜单生成器实际运行界面
4.在Index文字框中输入另一个不同的数值;
5.对于其它菜单项重复步骤2到4。
VB处理控制项数组的方法如下:当数组中的某一个控制项响应一
个事件后,VB就调用相应的事件过程,并将菜单项的索引值作为参数传
递给该过程,使程序能判断出哪个控制项应当响应这个事件。
用如下步骤建立这个应用程序:
步骤1:使用缺省的窗体,并将其标题改为"动态菜单演示窗口"。
步骤2:加上控制项。
在本例中控制项为两个命令按钮Command1和Command2,分别用来
完成添加菜单项和删除菜单项的功能,并分别命名为"添加菜单项"和"
删除菜单项"。
步骤3:加上菜单。
菜单生成器的实际运行如图1所示:共有四条菜单项,其中"演示菜
单"为主菜单名;"退出演示"用于退出该程序,它们始终是可见的;另有
两条菜单项,其中一个Caption内容为空,Nam e为Menu,Index值设为0,
用于产生菜单控制项数组,另一个为连线符"—",用于分隔显示,它们
被初始化为不可见菜单项,将在程序的运行过程中使用。
步骤4:编写事件和菜单项通用过程。
在运行期间用Load语句动态地把一个菜单项加到菜单控制数组中
:
Load menuname(menunum)
在运行期间用Unload语句动态地删除菜单控制数组中的某个菜单
项:
Unload menuname(menunum)
图2 添加动态菜单前的运行实例
图3 添加动态菜单后的运行实例
说明:menuname是菜单项的名字,menunum是菜单项的索引值,它们
是两个全局变量,在程序的通用声明部分声明它。程序的实际运行情
况如图2和图3所示,其中图2为添加动态菜单项之前的菜单情况,图3为
添加动态菜单项之后的菜单情况。
程序清单如下:
’全局变量的声明
Dim menunum As Integer
Dim menuname As String
’添加动态菜单项的过程
Private Sub Command1_Click()
msg$="请输入欲添加的菜单项名称:"
menuname$=InputBox$(msg$,"菜单项名称输入")
If menuname$="" Then Exit Sub’对Cancle的处理
menunum=menunum+1
If menunum >0 And menu_line.Visible=0 Then
menu_line.Visible=-1
Load Menu(menunum)
Menu(menunum).Caption=menuname$
Menu(menunum).Visible=-1
End Sub
’删除动态菜单项的过程
Private Sub Command2_Click()
If menunum=0 Then Exit Sub
num%=0
msg$="请输入欲删除的菜单项名字:"
menuname$=InputBox$(msg$"菜单项名称输入")
If menuname$="" Then Exit Sub’对Cancle的处理
For i%=1 To menunum
If Menu(i%).Caption=menuname$ Then
num%=i%
Exit For
End If
Next i%
If num% > menunum Or num% < 1 Then
MsgBox"无匹配的菜单项!"
Exit Sub
End If
For i%=num% to menunum1
Menu(i%).Caption = Menu(i%+1).Caption
Next i%
Unload Menu(menunum)
menunum=menunum1
If menunum=0 Then
menu_line.VisibIe =0
End Sub
’"退出演示"菜单命令过程
Private Sub exit_Click()
End
End Sub
’程序初始化
Private Sub Form_Load()
menunum=0
menuname=""
End Sub
’添加后的动态菜单项的命令响应
Private Sub Menu_Click(Index As Integer)
MsgBox("这是"+Menu(Index).Caption+"菜单项的事件响应")
End Sub
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店