零基础学Visual Basic第2版
上QQ阅读APP看书,第一时间看更新

2.5 窗体的事件

事件是窗体或控件能识别的动作。Visual Basic的每一个窗体和控件都有一个预定义的事件集。如果其中有一个事件发生,而且,在关联的事件过程中存在代码,则Visual Basic将会执行这些代码。窗体有很多的事件,本节将介绍其中常用的几个窗体事件。

2.5.1 Click(单击)事件

该事件在窗体或控件被单击时发生。因为事件发生时如果在该事件中写有程序代码,这些程序代码将会被执行,所以Click事件也是如此。在此需要说明的是,必须在窗体的空白区域或无效控件上单击才可以触发此事件。

【实例2.5】用鼠标单击窗体时将窗体的标题改为“窗体Click事件试验”。

【实现步骤】因为只有单击窗体时,才将窗体的标题改为“窗体Click事件试验”。所以,代码应该写在Click事件中。编程步骤如下。

(1)新建一个标准EXE工程。

(2)在设计状态下,双击Form1窗体空白处,打开代码编辑器窗口。

(3)在代码编辑器的过程框中选择Click事件,如图2.10所示。

(4)在自动产生的Form_Click()事件的开头和结尾之间写入代码如下。

        01 Me.Caption = "窗体Click事件试验"

图2.10 选择Click事件

说明

Me代表所在模块相关联的窗体的名称。在本例中代表Form1。

【运行效果】按下F5键运行程序,并单击窗体空白处测试运行结果,这里不再给出效果图。

2.5.2 DblClick(双击)事件

该事件在窗体或控件被双击时发生。实际上用鼠标双击窗体或控件时不仅会触发DblClick事件,同时也会触发Click事件。

2.5.3 Load(载入)事件

该事件在窗体被加载时自动发生,也可以说是窗体在屏幕上显示之前发生。Load事件是一个很重要的事件。对于各种初始化的操作通常情况下都要在该事件中进行。

说明

上面所说的加载是将一个文件从磁盘或磁盘缓冲区调入到内存的过程。

【实例2.6】启动程序后,让窗体在屏幕的正中央出现。

【实现步骤】编程步骤如下。

(1)新建一个标准EXE工程。

(2)在设计状态下,双击Form1窗体空白处,打开代码编辑器窗口。

(3)找到Form_Load事件。如果在代码编辑器中没有此事件的开头和结尾,从过程框中选择Load即可。

(4)在该事件开头和结尾之间写入代码后的代码编辑区中内容为:

        01 Private Sub Form_Load()
        02   Me.Move   (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
        03 End Sub

【代码说明】程序中的Screen.Width为显示屏幕的宽度, Screen.Height为显示屏幕的高度。

【运行效果】按下F5键运行程序,将会看到窗体在屏幕的正中央出现。

技巧

使用窗体布局窗口也可以设置窗体在屏幕中出现的位置。不过,由于是手动设置,所以出现位置的精确度不如上面的程序。

2.5.4 Unload(卸载)事件

该事件在窗体被卸载时发生,也可以说是在单击窗口的关闭按钮或使用卸载(Unload)语句时发生。Unload事件同样是一个很重要的事件。窗口关闭时所有的善后工作都要在此事件中进行。

Unload事件的一个典型应用是解决关闭窗体时跳出是否真的要关闭,或是否要保存等提示框。由于这个典型应用使用到的内容是本书后面章节的内容,因此下面实例只是叙述一下编程步骤,对于具体的代码内容不在此处讲解。

【实例2.7】单击窗口的关闭按钮时,弹出一个小对话框进行确认操作。

【运行效果】如图2.11所示。当用户单击“是”按钮时,关闭窗口;当单击“否”时,此窗口不被关闭继续运行。

【实现步骤】编程步骤如下。

(1)新建一个标准EXE工程。

(2)在设计状态下,双击Form1窗体空白处,打开代码编辑器窗口。

图2.11 实例2.7的运行效果

(3)从代码编辑器的过程框中选择Unload。

(4)在Unload事件开头和结尾之间写入代码后的代码编辑区中内容为:

        01 Private Sub Form_Unload(Cancel As Integer)
        02        Dim x As Integer
        03        x = MsgBox("您真的要关闭窗口么?", vbYesNo)
        04        If x = vbNo Then
        05                 Cancel = -1
        06        End If
        07 End Sub

(5)按下F5键运行程序,试着关闭窗口。

【代码说明】在Visual Basic的语句中,所有的标点符号都必须是英文状态下的标点符号。因此上面实例中的,“您真的要关闭窗口么?”两边的双引号是英文状态下的双引号,输入时注意切换输入法状态。

技巧

频繁地切换输入法状态确实很让人无奈,有时更会因为一时的疏忽忘了切换输入法,因此输入了中文标点符号从而引起程序运行出错。有一个技巧是先将英文符号和表达式都写完。然后回过头来,再切换成中文输入法将中文文字添加到英文符号之间。

Unload事件在代码编辑器中自动生成的事件开头和上面介绍的其他事件开头有所不同。在Unload后面的括号里有串文字,其中将“Cancel”称为事件的参数。该参数被设置为任何一个非零值时会取消对窗体的卸载。

2.5.5 Resize (改变大小)事件

该事件在窗体第一次显示或者改变窗体大小时发生,主要作用是其中写入改变窗体大小时移动控件或调整控件大小的程序代码。

【实例2.8】窗体Form1上有一个文本框Text1占满整个窗体,如图2.12所示。要求:不管怎样改变窗体大小,Text1都会占满该窗体。

编写程序如下。

图2.12 实例2.8(设计状态)

        01 Private Sub Form_Resize()
        02     Text1.Move 0, 0, Width, Height
        03 End Sub

【代码说明】Resize事件中语句的作用是将Text1文本框用其Move方法移动到紧挨着窗体的左边和顶边,并且将其宽度和高度设为窗体的宽度和高度。

【运行效果】通过下面两种方法观察本实例的运行结果

❑运行程序后,改变窗体的大小观察其变化

❑在设计状态,删除Resize事件中的语句,然后运行程序通过改变窗体大小观察其变化。

说明

控件的Move方法和前面讲过的窗体的Move方法的格式和用途是一样的。区别在于一个是移动控件,一个是移动窗体。Width和Height前没有加对象名代表本窗体的宽度和高度。

2.5.6 Activate(活动)/Deactivate(非活动)事件

当窗口变为活动窗口时触发Activate事件。当窗口变为非活动窗口,即其他窗口成为了活动窗口时触发Deactivate事件。

一个窗体可以通过被单击,或使用代码中的Show或SetFocus方法之类的用户操作而变成活动窗体。

2.5.7 Paint(绘制)事件

在一个窗体被移动或放大之后,或在一个覆盖该窗体的窗体被移开之后,该窗体部分或全部暴露时,触发此事件。Paint事件主要用于在窗体上绘图。