我们在上一节示例的基础上,来制作如图一的小程序,每点击一次“增加信息”命令,菜单上会自动增加一个“信息”菜单,每点击一次“清除菜单”命令,程序自动清除当前信息菜单;当菜单回复原样,即只剩“信息”菜单时,“清除菜单”无效。
图一
一、界面设置:
在第二节最终结果的基础上,创建如图一的界面,需要注意的是,“信息”菜单(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
三、提醒:
本节最重要的是掌握诸如 hintnumber 这种辅助变量,它将鼠标的点击动作用数字的形式加以诠释,通过值的加减来完成菜单的动态增加与清除。
这种辅助变量的使用,在 vb 中几乎是无处不在的,如前面我们在讲 for……next……的语法时说的作为累加器的变量。
另外,从上面的例子我们可以看出, load/unload 不仅适用于窗体的装入与卸载,同时还适用于菜单的装入与卸载。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器