4.2.1 鼠标事件
在第2章已经介绍过,鼠标事件有共有5种,它们分别是MouseDown(按下鼠标键)、MouseUp(释放鼠标键)、MouseMove〔移动鼠标)、Click(单击)与DblClick〔双击).
1. Click事件与DblClick事件
窗体的Click事件过程的形式如下:
Private Sub Form_Click()
End Sub
在该事件过程中添加一段代码,运行程序时,当使用鼠标单击窗体时,则该段代码就会被执行。
提示:使用双击窗体的方法打开【代码】窗口。出现在代码窗口中的事件过程不是Click事件过程,用户可以在【代码】窗口的事件框中选择Click事件,则Click事件过程的框架就会出现在代码编辑区中。用户也可以自行输入事件过程的框架。对于其他一些事件,如DblClick事件,待况与此类似。
窗体的DblClick事件过程的形式与Click事件过程的形式类似,如下所示:
Private Sub Formes DblClick()
End Sub
在该事件过程中添加一段代码,运行程序时,当使用鼠标双击窗体时,则该段代码就会被执行。
注意:双击鼠标会同时触发Click事件与Db1Click事件,即在程序运行时,当用户双击窗体时,则Click事件过程与Db1Click事件过程都将被执行。
2. MouseDown事件与MouseUp事件
窗体的MouseDown事件过程与MouseUp事件过程类似,形式如下:
Private Sub Form_McuseDown(Button As Integer,shift As Integer,X As Single,Y As Single)
End Sub
Private Sub Form_MouseUp(Button As Integer,shift As Integer,X As Single,Y As Single)
End Sub
与Clicik与DblClick事件过程不同,在这两个事件过程中,含有Button、Shift,X和Y四个参数,其中参数Button用来判断用户按下的是鼠标的哪一个键。参数Shift用来判断是否按下Shift, Ctrl或Alt键构成组合状态,参数X和Y用来返回指针所在的位置。 [NextPage]
表4.4中列出了MouseDown事件过程中参数Button的返回值与对应的操作。它同样也适用于MouseUp事件过程

实例4.1识别用户所按的键
在该程序中,当用户将鼠标移动到窗体上时,如果按下左键,则窗体上显示"您按下的是左键",如图4.2所示,如果按下右键,则窗体上显示"您按下的是右键",如图4.3所示。
打开窗体的【代码】窗口,将下列代码添加到Form_MouseDown事件过程中:
Private Sub Form_MouseDown(Button As Integer, shift As Integer,X As Single,Y As Single)
Select Case Button
Case 1
Form1.Print “您按下的是左键”
Case 2
Form1.Print “您按下的是右键”
End Select
End sub
在该段代码中,使用了Select Case语句来判断参数Button的值,使用窗体的Print方法来在窗体上显示文本。Print方法是窗体的一个很重要的方法,在很多实例中都使用到了该方法。
运行该程序,当在窗体中按下鼠标的键时,就会触发Form_MouseDown事件过程,并将所按键代表的数值赋给参数Button.因此,Select Case语句就可以通过参数Button的值来判断用户所按的键。
表4.5中列出了MouseDown事件过程中参数Shift的返回值与对应的操作。它同样也适用于MouseUp事件过程。
同样可以通过Select Case语句判断MouseDown事件过程中Shift参数的返回值,来获取用户所按下的组合键。用户可参照实例4.1自行编制一个小程序来熟悉Shift参数的使用。
3. Mouse Move事件
窗体的Mouse Move事件过程的形式如下:
Private Sub Form_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
End Sub
MouseMove事件过程中参数的含义及其用法与MouseDown事件过程中的相应参数完全相同。这里给出一个探测鼠标位置的实例。
实例4.2探测鼠标的位置
在该程序中,当用户在窗体上移动鼠标时,则在窗体上的文本框中会显示出当前鼠标的位置。
在窗体的左上角放置一个文本框,如图4.4所示。窗体与控件的属性设置如表4.6所示。
打开窗体的【代码】窗口,将下列代码添加到Form_MouseMove事件过程中:
Private Sub From_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
Texts1.Twxt="X '& X &"Y=" & Y
End sub
由于在移动鼠标时,MouseMove事件不断被触发,其中的代码也就不断地执行。因此,在移动鼠标时,文本框中的内容会不断被更新。
运行该程序,在窗体中移动鼠标,则文本框中动态显示出鼠标的位置,如图4.5所示。
键盘事件有共3种,分别是KeyDown(按下键)、KeyUp(释放键)与KeyClick(敲击键).
注意:只有当窗体为当前活动窗体时,按键才能触发窗体的键盘事件。另外,如果窗体上有能获得焦点的控件,则按键触发的将是控件的键盘事件。如果希望按键后,总是能触发窗体的键盘事件,应该将窗体的KeyPreview属性设置为Ture.
[NextPage]
1.KeyClick事件
窗体的KeyClick事件过程的形式如下:
Private Sub Form_KeyPress(KeyAscii As Integer)
End Sub
其中参数KeyAscii是一个整数,用来返回用户所按键的ASCII码。利用该参数可以判断出用户按的是哪一个键。
实例4.3显示所按键的ASCII码
运行该程序,当用户按健盘上某键时,在窗体上显示用户所按键的ASCII码,例如,按回车键,则在窗体中显示"所按键的ASCII码值是:13.
打开【代码】窗口,将下列代码添加到Form_KeyPress事件过程中:
Private Sub Form_KeyPress(KeyAscii As Integer)
Print"所按键的ASCII码值是:"&KeyAscii
End Sub
运行该程序,按键盘中某键,则窗体上就会显示出所按键的ASCII码,如图4.6所示的是按下Enter键和q键的效果。表4.7中列出了键盘按键的ASCII码。
2. KeyDown与KeyUp事件过程
KeyDown与KeyUp事件过程的形式相同,如下所示:
Private Sub Form_KeyCode As Integer,Shift As Interger)
End Sub
Private Sub Form_keyUp(keyCode As Integer,Shift As Integer)
End Sub
KeylDown与KeyUp事件过程中的Shift参数与MouseDown事件过程中的Shift参数的含义相同。参数KeyCode则是用来返回按键的键码。
功能键、换档键以及编辑键等没有ASCII码,但所有的键都有一个键码。每一个键(不是字符)对应一个键码,大键盘上的数字键和小键盘上的数字键的键码也不同。字母键的键码就是其大写字母的ASCII码。对于有上下档的按键,其键码是下档字符的ASCII码。表4.8中列出了一些按键的键码。
读者可参照实例4.3,自行编写一个可以显示用户所按键键码的程序。
除鼠标与键盘事件外,窗体对象还有其他一些事件,如表4.9所示。
可以在【代码】窗口中查到窗体所支持的所有事件。在【代码】窗口的【对象】框中选择Form,单击【事件】框,即可弹出窗体的事件列表,如图4.7所示。
一些应用程序,当用户改变窗体的大小后,如拖动窗体边框或最大化等,则窗体中的控件也随着改变以适合窗体的大小。这里,我们编写一个程序来模拟这种情形。
实例4.4窗体的Resize事件
在该程序中,当用户改变窗体的大小时,则窗体中按钮的大小也将成比例地改变,并且按钮始终处于窗体的中心。
在窗体中放置一个按钮控件,如图4.8所示。窗体与按钮的属性设置。
打开【代码】窗口,将下列代码添加到Form- Resiae事件过程中:
Private Sub Form_Resize()
ComSize.width=ForSize.Width/5
ComSize.Height=ForSize.Height/6
ComSize.Top=ForSize.Height/2-ComSize.Height/2
ComSize.Left=ForSize.width/2-ComSize.Width/2
End Sub
在该段代码中,我们将按钮的宽度设置为窗体宽度的1/5,按钮的高度设置为窗体高度的1/6,并将按钮的位置设置在窗体的中心。
[NextPage]
运行该程序,则窗体如图4.9所示。可见,在窗体启动后,窗体的Resize事件就被触发了。使用鼠标拖动窗体的边界来改变它的大小,或单击最大化按钮使窗体最大化,可以发现,窗体中按钮的大小也随着成比例地改变,并且始终处于窗体的中心。
由于QueryUnload事件在窗体卸载之前发生,因此,可以通过编写QueryUnload事件过程来完成一些工作,如文件的保存等。该事件在MDI应用程序中相当重要,这在第七章中还会讲到。这里,只是通过一个实例介绍QueryUnload事件的使用。
实例4.5窗体的QueryUnload事件
打开窗体的【代码】窗口,在事件列表中选择QueryUnload事件,则QueryUnload事件过程的框架就出现在代码编辑区中,形式如下:
Private Sub Form_QueryUnload(Cancel As Integer,Unload(Cancel As Integer, UnloadMode As Integer)
End Sub
其中参数Cancel是一个整数。若在QueryUnload事件过程中给此参数赋一个非零值(True),则将阻止窗体的关闭;若赋0值(False),则将关闭窗体。如果忽略此参数,窗体将被关闭。
UnloadMode参数是事件的返回值,它表示引起QueryUnload事件的原因。表4.11中列出了该参数的返回值及其含义。
编写QueryUnload事件过程如下:
Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer)
If UnloadMode=0 Then
Print“单击关闭按钮关闭我,休想!”
Cancel=Ture
End If
End Sub
运行该程序,单击窗体右上角的【关闭】按钮,窗体并不关闭,并且显示"单击关闭按钮关闭我,休想!",如图4.11所示。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|