龙空技术网

窗体及控件的常用事件

VBA语言専攻 299

前言:

此刻兄弟们对“vbnet关闭窗体不让退出”大约比较关注,同学们都需要了解一些“vbnet关闭窗体不让退出”的相关资讯。那么小编也在网摘上搜集了一些关于“vbnet关闭窗体不让退出””的相关知识,希望看官们能喜欢,大家快快来学习一下吧!

【分享成果,随喜正能量】知识缺乏,可以去汲取、去丰富;能力低下,可以去训练、去强化。唯有扩大胸襟、拓宽视野、升华境界不是一件容易的事。它需要不断地学习、自省、淬火、修炼和砥砺。做人、做事有了境界,就会成为仁者、智者。既仁又智,当天下无敌。人渴望被承认,也就是别人的目光,但是同时,当别人的目光围拢过来的时候,他又感到窒息,感到不自由。获得承认和追求自由之间,有一个多么辩证的关系。

《VBA之Excel应用》是非常经典的,是我推出的第七套教程,定位于初级。这套教程从简单的录制宏开始讲解,一直到窗体的搭建,内容丰富,实例众多。大家可以非常容易的掌握相关的知识,这套教程共三册,十七章,都是我们在利用EXCEL工作过程中需要掌握的知识点,希望大家能掌握利用。今日讲解的内容是“VBA之EXCEL应用”的第十六章“用户窗体(Userform)对象”的第3节:窗体及控件的常用事件

第三节 窗体及控件的常用事件

上一讲讲了窗体的显示,这一讲讲解窗体的事件。所谓事件,简单地说就是对象的响应。对于窗体而言,它会响应用户的什么操作呢?我们看下面的详细讲解。

VBE中的对象可识别的事件是预先确定的,并不是所有对象都会具有相同事件。但每个事件都有一个事件过程的框架与之对应,当某一事件发生时,系统将立即执行对应的事件过程,因此,如果想利用这个过程去完成指定的任务,那么用户就必须在这个对应的事件过程中编写程序代码,以便响应发生的事件,否则,即使发生了可识别的事件,系统也不会做任何操作。

我们可以通过下面介绍的界面看到用户窗体中的事件:

1 常用的窗体事件

1) Initialize事件 Initialize事件用来提供应用程序或用户窗体中的控件、变量等进行初始化。该事件的作用和类模块中的该事件相同。

2) QueryClose事件 该事件发生在UserForm关闭之前。通常用这个事件确保在关闭应用程序之前,应用程序包含的用户窗体中没有未完成的任务。该事件的语法格式如下:

格式:Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

该事件括号内有两个参数。其中,参数Cancel是一个整数的值,用于指定是否在所有加载的用户窗体中停止QueryClose事件,当Cancel的值设置为0以外的任意值时,QueryClose事件将停止执行,并防止关闭UserForm与应用程序;参数CloseMode为一个值或常数,用来指示引起QueryClose事件的原因。

CloseMode参数返回下列的值

vbFormControlMenu 0 用户在UserForm上选择“控制”菜单中的“关闭”命令。

VbFormCode 1 由代码调用Unload语句。

vbAppWindows 2 正在结束当前Windows操作环境的过程。(仅用于Visual Basic 5.0。)

vbAppTaskManager 3 Windows 的“任务管理器”正在关闭这个应用。(仅用于Visual Basic 5.0。)

“常数”是执行程序时保持常数值的命名项目。常数可以是字符串、数值、另一常数、任何(除乘幂与Is之外的)算术运算符或逻辑运算符的组合。每个主应用程序皆可定义自己的一组常数。用户也可以使用Const语句定义附加常数。可在代码中的任何地方使用常数代替实际的值。

3)Terminate事件 该事件用于删除窗体中对象事例的所有引用。Terminate事件发生在卸载窗体对象之后。如果应用程序为非正常退出,从而导致在内存中删除UserForm的示例,将不会触发Terminate事件。例如,在从内存中删除UserForm之前,应用程序调用了End语句,则UserForm不会触发Terminate事件。

4)Activate和Deactivate事件 当运行中的对象变成活动窗口的时候就会发生Activate事件。而当对象不再是活动窗口时,则会发生Deactivate事件。下面的情况会引发这两种事件:

① Show 对象可使用代码中的Show方法变成活动的,且只有在对象是可见的时候才会发生Activate事件。除非使用Show方法,否则用Load加载的UserForm是不可见的。

 ②切换焦点 在应用程序中移动焦点时,也会引发Activate和Deactivate事件。而将焦点移出或移动到另一个应用程序中的对象并不会触发此事件。在卸载对象时,并不会发生 Deactivate 事件。

5)C1ick单击事件。程序运行时,当用户用鼠标左键单击窗体时,引发该窗体的C1ick事件(也称单击事件)。

6) DblClick双击事件。程序运行时,当用户用鼠标左键双击窗体时,引发该窗体的DblClick事件(也称双击事件)。

7)Load装载事件。运行程序,当系统把窗体由外部存储介质装入内存时,引发该窗体的Load事件(也称装载事件)。

8)Resize改变窗体尺寸事件。程序运行时,当窗体大小被改变时,引发该窗体的Resize事件。

9)Activate激活窗体事件。程序运行时,当窗体变为当前窗体时,引发该窗体的Activate事件(也称激活事件)。

10) Deactivate失去激活事件。程序运行时,当A窗体取代B窗体变成当前窗体时,引发B窗体的Deactivate事件(也称失去激活事件)。

11) Unload卸载事件。当窗体被从内存中卸载时,引发该窗体的Unload事件(也称卸载事件)。

从上面介绍的几个事件来看,事件都是在特定的环境下发生的。比如Click事件,只有在单击某个对象时才会发生。可以跟据这一特点,看出窗体中这些自动执行的事件的顺序是:运行窗体后,窗体执行初始化Initialize事件;然后再执行激活Activate事件;当用户的操作完成后,单击关闭按钮,执行关闭QueryClose事件;然后系统再执行Terminate事件,释放对象和用户窗体在内存中的实例和引用。

2 利用窗体的QueryClose事件,完成不保存退出

QueryClose事件在上面已经详细地讲解,在 UserForm关闭之前发生该事件。当点击窗体右上方的关闭按钮时会有触发,此事件在控制关闭窗体就退出关闭工作簿的时候很有用处,使用登录窗体的朋友不会错过它。如下代码,完整写入到对应窗体代码模块中即可实现点击该窗体的关闭按钮,就执行不保存工作簿就退出。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode AsInteger)

Application.Quit

ThisWorkbook.Close False

End Sub

Sub mynz()

UserForm1.Show

End Sub

代码截图:

代码的运行:

当点击上面的关闭按钮时会直接退出当前的文件工作簿16xlsm

3 控件事件

在讲解窗体的时候,我们讲到,“在用户窗体中,我们可以添加控件,可以显示数据,可以和用户保持实时的交互”。可见在窗体中添加控件,是一项重要的工程,对于窗体中的控件,也有着不同的属性和事件,我们来简单介绍一下一下常用的控件事件。

1)单击事件Click 点击控件时触发。注意TextBox控件没有单击事件,可以通过获得焦点事件处理。

2)双击事件DblClick。双击控件时触发。

3) Change事件,当控件的值(VALUE)变动,则触发事件发生执行事件代码。

4) Enter事件,获得焦点事件,可以简单理解为光标跳动到当前控件时触发的事件。

5) Exit事件,失去焦点事件。简单理解为光标离开当前控件时触发的事件。如果窗体中有多个可选控件(非标签控件),要实现文本框中回车触发,也可以使用Exit事件处理。

6) KeyDown和KeyUp 事件。按下和释放某键时这两个事件依次发生。按下键时发生 KeyDown 事件,而释放键时发生 KeyUp 事件。

利用KeyDown处理回车事件示例:

Private Sub TextBox1_KeyDown(ByVal KeyCode AsMSForms.ReturnInteger, ByVal Shift As Integer)

IfKeyCode = 13 Then

’此处写执行的代码

End if

End sub

今日内容回向:

1) 窗体的事件有哪些?

2) 控件的事件有哪些?

3) 如何卸载窗体时发生什么事件?

本讲内容参考程序文件:工作簿16xlsm

标签: #vbnet关闭窗体不让退出 #控件属性的代码设置格式是 #excel中控件的使用方法有哪些 #vb控件有哪些基本操作 #焦点控件怎么设置