vbdoevents,vbdoevents函数用法

http://www.itjxue.com  2023-01-13 02:38  来源:未知  点击次数: 

VB 如何定义 doevent

DoEvents是一个内部函数,不用定义,其功能是:转让控制权,以便让操作系统处理其它的事件!

如果在一个循环中不加doevents,那么程序在执行到此循环时,就会紧紧抓住控制权不放,如果此循环很大很费时,那么直到循环结束,否则你做的程序的其它功能(点击按钮,输入文字等)都会不可用,但如果循环里加了doevents这个函数,那么循环每次执行到此函数的时候,就会等一下,看看你的程序的其它部分有没有动作,表面上看就不会出现卡死的现象,这样的话,程序会显得更人性化!

注:此函数会占用较高的CPU使用率,如果可能的话,建议配合sleep()函数一起用,能降低CPU使用率!

vb中DoEvents是什么意思

转让控制权,以便让操作系统处理其它事件。

例如:

在窗口中放一个textbox,然后写程序,循环从1到10万,然后循环体里面就是把这个数写到textbox里面,如果没有DoEvents,程序运行的时候就是死机一样,然后直到最后窗口显示10万,中间数字什么也看不见。如果在每次写了textbox以后,都来一下DoEvents,窗口就会重画,运行的时候就能看见textbox里面的数一个一个的长上去。

Visual Basic源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建Active?X控件,用于高效生成类型安全和面向对象的应用程序。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。

扩展资料:

vb语言特色:

1、事件驱动的编程机制:

面向过程的程序是由一个主程序和若干个子程序及函数组成的。程序运行时总是先从主程序开始,由主程序调用子程序和函数,开发人员在编程时必须事先确定整个程序的执行顺序。而Visual Basic 6.0事件驱动的编程是针对用户触发某个对象的相关事件进行编码,每个事件都可以驱动一段程序的运行。开发人员只要编写响应用户动作的代码。这样的应用程序代码精简,比较容易编写与维护。

2、结构化的程序设计语言:

Visual Basic 6.0具有丰富的数据类型和众多的内部函数。其采用模块化和结构化程序设计语言,结构清晰,语法简单,容易学习。

3、强大的数据库功能:

Visual Basic 6.0利用数据控件可以访问Access、FoxPro等多种数据库系统,也可以访问Excel、Lotus等多种电子表格。

4、ActiveX技术:

ActiveX发展了原有的OLE技术,使开发人员摆脱了特定语言的束缚,方便地使用其他应用程序提供的功能,使Visual Basic 6.0能够开发集声音、图像、动画、字处理、电子表格、Web等对象于一体的应用程序。

5、网络功能:

Visual Basic 6.0提供的DHTML(动态HTML)设计工具可以使开发者动态地创建和编辑Web页面,使用户能开发出多功能的网络应用软件。

参考资料来源:百度百科-VB

在VB中如何使用DOEVENTS

system.windows.forms.application.doevents()

or

my.application.doevents()

处理目前在讯息伫列中的所有

windows

讯息。

'

usage

my.application.doevents()

'

declaration

public

sub

doevents()

备注

my.application.doevents

方法可以让您的应用程式在执行程式码的同时,也能够处理可能所引发的其他事件。my.application.doevents

方法与

doevents

方法具有相同的行为。

当您执行

windows

form

应用程式时会建立新表单,表示会等待处理事件。每一次表单处理事件时

(例如,按钮点选),便会处理与该事件相关联的所有程式码。所有其他事件都会在伫列中等待。当您的程式码在处理事件时,应用程式不会做出回应。例如,如果将其他视窗拖曳至顶端,不会重新绘制视窗。

如果您在程式码中呼叫

my.application.doevents,应用程式就可以处理其他事件。例如,如果程式码将资料加入至回圈

(loop)

中的

listbox,且会在回圈的每个步骤之后呼叫

my.application.doevents,则将其他视窗拖曳至该视窗上方时,便会重新绘制表单。如果从程式码中移除

my.application.doevents,则必须等到按钮的点选事件处理常式完成执行之后,才会重新绘制表单。

您通常会在回圈中使用此方法处理讯息。

注意事项:

my.application.doevents

方法处理事件的方式和表单的方式不太一样。使用多执行绪处理,让表单直接处理事件。如需详细资讯,请参阅

visual

basic

中的多执行绪。

警告:

如果处理使用者介面

(ui)

事件的方法呼叫

my.application.doevents

方法,则在它完成之前可能会重新输入方法。发生这个状况的原因是

my.application.doevents

方法会处理

windows

讯息,而

windows

讯息会引发事件。

VB程序中DoEvents()是什么意思?

DoEvents 函数

转让控制权,以便让操作系统处理其它的事件

因为vb是单线程的东东,所以在适当的时候需要加上DoEvents 函数

转让控制权,以便让操作系统处理其它的事件

DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。

DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。

DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。

小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。

使用 DoEvents

尽管 Timer 事件是后台处理的最好工具,对耗时极多的任务,情况更是如此,但是,DoEvents 函数还是提供了一种取消任务的简便方法。例如,下列代码将显示一个 "Process" 按钮,单击这个按钮时,它将变成 "Cancel" 按钮。再次单击按钮又将中断正在执行的任务。

'此按钮标题是 "Process"

Private Sub Command1_Click()

'过程的所有实例都共享静态变量。

Static blnProcessing As Boolean

Dim lngCt As Long

Dim intYieldCt As Integer

Dim dblDummy As Double

'按下按钮时,检测是否在处理

If blnProcessing Then

'如果正在处理,则取消

blnProcessing = False

Else

Command1.Caption = "Cancel"

blnProcessing = True

lngCt = 0

'执行一百万次浮点乘法计算。每一千次后,检测是否要取消。

Do While blnProcessing And (lngCt 1000000)

For intYieldCt = 1 To 1000

lngCt = lngCt + 1

dblDummy = lngCt * 3.14159

Next intYieldCt

'DoEvents 语句允许其它事件发生,包括第二次按此按钮。

DoEvents

Loop

blnProcessing = False

Command1.Caption = "Process"

MsgBox lngCt " multiplications were performed"

End If

End Sub

DoEvents 将控制切换到操作环境内核。只要此环境中的所有应用程序都有机会响应待处理事件,应用程序就又恢复控制。这不会使应用程序放弃焦点,但会使后台事件能够得到处理。

这种妥协的结果可能并不总是达到预期目标。例如,下述 Click 事件代码在单击按钮后要一直等候十秒钟,而后才显示一条信息。如果在按钮正在等待期间单击它,则将以相反顺序完成单击操作。

Private Sub Command2_Click()

Static intClick As Integer

Dim intClickNumber As Integer

Dim dblEndTime As Double

'每次单击按钮时

'赋予唯一数值。

intClick = intClick + 1

intClickNumber = intClick

'等待十秒。

dblEndTime = Timer + 10#

Do While dblEndTime Timer

'不做任何事情,仅仅允许

'其它应用程序处理

'它们的事件。

DoEvents

Loop

MsgBox "Click " intClickNumber " is finished"

End Sub

对于通过 DoEvents 放弃控制的事件过程,有时可能希望防止在 DoEvents 返回之前重新调用这一过程。否则将无穷无尽地调用该过程,直到系统资源消耗殆尽。可暂时禁止控件,或象上例一样,使用一个静态的“标志”变量防止此事发生。

在使用全局数据时避免 DoEvents

当一个函数已通过 DoEvents 放弃控制时,可相当安全地再次调用函数。例如,下一过程将检测质数并用 DoEvents 语句周期地启动其它应用程序处理事件:

Function PrimeStatus (TestVal As Long) As Integer

Dim Lim As Integer

PrimeStatus = True

Lim = Sqr(TestVal)

For I = 2 To Lim

If TestVal Mod I = 0 Then

PrimeStatus = False

Exit For

End If

If I Mod 200 = 0 Then DoEvents

Next I

End Function

该代码中每重复 200 次就调用一次 DoEvents 语句。这样一来,当该环境的其余部分对事件作出响应时,只要有必要,PrimeStatus 过程就可继续计算。

考虑在调用 DoEvents 期间发生的事情。在其它窗体和应用程序处理事件时将暂停执行应用程序代码。这些事件之一有可能是一个按钮单击操作,它将再次启动 PrimeStatus 过程。

这将导致重新进入 PrimeStatus 过程的,但是,因为在函数每次出现时,堆栈都为其参数和局部变量分配了空间,所以重入不会引发冲突。当然,如果过多调用 PrimeStatus,则可能出现“溢出堆栈空间”错误。

如果 PrimeStatus 使用或改变模块级变量或全局数据,情况就会完全不同。此时,在 DoEvents 能够返回之前执行 PrimeStatus 的另一个实例,这将导致模块数据或全局数据的值完全不同于它们在调用 DoEvents 之前的值。于是,PrimeStatus 的结果将会难以预料。

(责任编辑:IT教学网)

更多

推荐其他源码文章