3.6 常用事件在程序设计中应用
事件驱动模式是VB程序的主流,我们必须了解每一种对象会产哪些事件,以及这些事件产生的时机。随着对象在特性上的差异,可能产生的事件也会有的不同。下面先介绍一些常用事件,及在程序设计中应用。
生与灭事件
事件 发生时机
initialize 窗体第一次被装入时
terminate 窗体最后一次被卸载时
load 窗体每一次被装入时
unload 窗体每一次被卸载时
queryunload 窗体每一次被卸载时
Initialize与load事件区别
同样都是发生在窗体被装入时,两者很容易混淆,实际上intialize事件只有在窗体第一次被装入时发生,而load事件是在窗体每次被装入时都有发生。
例:打开第三章formlife.vbp
什么程序代码写在intialize或load事件程序?
1)控件的初始化:几乎都是放在load事件程序中,因为控件会随着窗体的卸载而一起被清除,所以每次被装入时都要进行初始化。
2)变量的初始化:放在initialize事件程序中居多,因为变量的内容光焕发不会随着窗体的卸载波而消失。当然,如果希望每次窗体被装入时都有重新设置变量的内容,就要将变量的初始化放在load事件程序中。
如何禁止用户使用关闭按钮半闭窗体?
在unload事件程序中含有一个cancel参数,如果将这个参数设置为true则窗体就不能关闭。
例:在程序中不允许用户通过单击关闭按钮关闭窗体。
Dim switch as boolean
form_unload
if not switch then
cancel=true
endif
end sub
command1_click
switch=true
unload me
end sub
Queryunloadd与unload事件有何区别
queryunload比unload事件先发生。
Queryunload事件比unload事件多了一个unloadmode参数
unloadmode可以取值 意义
vbformcontrolmenu(=0) 用户单击窗体上的关闭按钮
vbformcode(=1) unload语句调用
vbappwindows(=2) 用户结束windows操作系统
也即可以利用unloadmode参数来判断用户是否用鼠标单击了窗体上的关闭按钮。借助queryunload事件的参数简化上面的程序。
Private sub command1_click()
unload me
end sub
private sub form_queryunload(cancel as integer,unloadmode as integer)
if unloadmode=vbformcontrolmenu then cancel=true
end sub
Queryunload事件另一个应用:
经常用来检验程序结束前,窗口关闭前是否已经保存了该保存的东西,如果尚未保存,就显示一个对话框的信息。
对话框msgbox函数使用。
Msgbox函数格式:
msgbox(prompt [,buttons][,title])
prompt:是一个字符串,设置显示在对话框中信息内容。
Buttons:(可选参数)用于显示对话框中显示按钮数。形式、图样见P77。
Tile:(可选参数)设置显示在对话框标题中信息。
例:练习使用msgbox函数(ch03\练习11.vbp)
1)调用msgbox显示两个按钮(是,否),提示信息“要关闭 窗体吗?”。是,关闭窗体,否,
2)调用msgbox提示信息为“操作错误”显示图标为
3)调用msgbox提示信息为“没有满足条件的记录”,显示图 标为:
例:(第三章练习5)编写一个程序,当用户单击窗体关闭按钮时,弹出对话框,要用户确定是否真的关闭窗体,是—关闭,否—取消关闭窗体。
状态改变的事件
事件 发生时机
activate 当窗体成为活动窗口时
deactivate 当窗体不再是活动窗口时
gotfocus 对象获得焦点时
lostfocus 对象丢失焦点时
rezies 对象大小改变时
Activate与gotfocus事件有何区别
只有窗体对象才有activate事件,其他控件都有没有activate事件,它表示窗体变成“活动窗口”
gotfocus事件中,除了窗体对象含有这个事件外,其它控件如命令按钮,文本框、复选框、图片框等,也都有含有这个事件。
当光标落在某个对象上(对象获得焦点时)则会发生gotfocus事件。
例:当输入光标移到textbox时,整个textbox都变成被选区。
注:在textbox控件对象中有两个属性,用途是用来设置选取区。
Selstart 设置选取区的起始位置
sellength 用来设置选区的长度
private sub text1_gotfocus()
text1.selstart=0
text1.sellength=len(text1.text)
end sub
例:(第三章练习六)当输入光标移到textbox时,希望将其文字颜色设置为红色,以提醒用户注意,当输入光标离开textbox其文字还原原来的黑色。
当窗体大小改变时会发生resize事件
例:让控件随着窗体一起调整大小。(在窗体上放置textbox及picturebox)
private sub form_resize()
text1.left=0
text1.top=0
text1.width=me.scalewidth/2
text1.height=me.scaleheight
picture1.left=me.scalewidth/2
picture1.top=0
picture1.height=me.scaleheight
end sub