首页 百科知识 常用的事件和方法

常用的事件和方法

时间:2022-10-21 百科知识 版权反馈
【摘要】:在VFP中,常用的事件可以归类于鼠标事件、键盘事件、表单事件、控件焦点事件和数据环境事件等类型。在VFP中,与键盘操作相关的事件主要是Key Press事件。Load事件发生在Activate 和GotFocus事件之前。在Resize事件中使用Refresh方法时,每次调整表单或工具栏大小时,都强制重画整个对象。完成某种任务时使用Paint事件会引起级联事件。该事件的应用范围及其处理程序的语法与When事件类似。此事件忽略当前的ON ERROR例程,并允许各个对象在内部俘获并处理错误。

8.3 常用的事件和方法

一、常用的事件

在VFP中,常用的事件可以归类于鼠标事件、键盘事件、表单事件、控件焦点事件和数据环境事件等类型。详见表8-5。

表8-5 常用的事件

img295

1.KeyPress

在VFP中,与键盘操作相关的事件主要是Key Press事件。当用户按下并释放某个键时发生此事件。KeyPress事件常用于截取输入到控件中的键击,使用户可以立即检验键击的有效性或对键入的字符进行格式编排(使用Key Preview属性可以创建全局键盘处理程序)。

通常具有焦点的对象接收该事件。在两种特殊情况下,表单可以接收Key Press事件:

(1)表单中不包含控件,或表单的控件都不可见或未激活。

(2)表单的KeyPreview属性设置为“真”(.T.),表单首先接收KeyPress事件,然后具有焦点的控件才接收此事件。

例如,编写某表单的相关事件代码如下:

表单的activate事件:

this.text1.setfocus

img296

表单的KeyPress事件:

LPARAMETERS n KeyCode,nShift AltCtrl

this.text2.value=str(n KeyCode)+″  ″+str(nShift AltCtrl)

2.Load

在创建对象前发生。该事件应用于表单和表单集。

Load事件先为表单集发生,然后再为其包含的表单发生。Load事件发生在Activate 和GotFocus事件之前。在Load事件发生时还没有创建任何表单中的控件对象,因此,在Load事件的处理程序中不能对控件进行处理。

3.Un Load事件

在对象被释放时发生。该事件的应用范围及其处理程序的语法同Load事件类似。

Unload事件是在释放表单集或表单之前发生的最后一个事件,Unload事件发生Desttoy事件和所有包含的对象被释放之后。

该事件的发生取决于对象的类型:

(1)当释放引用表单的对象变量或该表单的表单集时,表单对象以代码形式释放。

(2)当释放引用表单集的对象变量时,表单集对象以代码形式释放。

如果一个容器对象包含多个对象,则该容器对象的Unload事件发生在其所包含的对象的Unload事件之后。例如,一个表单集中包含一个表单,该表单中包含一个控件(一个命令按钮),释放的顺序如下:表单集的Destroy事件、表单的Destroy事件、命令按钮的Destroy事件、表单的Unload事件、表单集的Unload事件。

4.Activate事件

当激活表单、表单集或页对象,或者显示工具栏对象时,将发生Activate事件。该事件应用于表单、表单集、页面、工具栏。

此事件的触发取决于对象的类型:

(1)当表单集中的一个表单获得焦点,或调用表单集的Show方法时,激活表单集对象。

(2)当用户单击一个表单或单击一个控件,或者调用表单对象的Show方法时,激活表单对象。

(3)当用户单击页面的选项卡,单击页面上的控件,或者将包含页对象的页框Active- Page属性设置为此页对象对应页码时,激活页对象。

(4)当调用工具栏的Show方法时,激活工具栏。

使用表单集的Show方法时,将显示所有Visible属性为“真”(.T.)的表单。Activate事件触发后,首先激活表单集,然后是表单,最后是页面。

5.paint

当表单或工具栏重画时发生。该事件应用于表单、工具栏。

当表单或工具栏移动或调整大小,或一个覆盖表单或工具栏的窗口移动,使得表单或工具栏部分或全部显露出时,重画该表单或工具栏。

在Resize事件中使用Refresh方法时,每次调整表单或工具栏大小时,都强制重画整个对象。完成某种任务时使用Paint事件会引起级联事件。通常,在下列情况下应避免使用Paint事件:

(1)移动表单或控件,或调整它们的大小。

(2)更改任何影响大小或外观的变量,例如,设置一个对象的BackColor属性。

(3)调用Refresh方法。

对于这些任务,调用Resize事件可能更合适。

6.InteractiveChange

在使用键盘或鼠标更改控件的值时发生。该事件应用于复选框、组合框、命令组、编辑框、列表框、选项按钮组、微调框和文本框

在每次交互地更改对象时,都要发生此事件,对于文本框,当用户在文本框中键入字符时,每一次击键都会触发该事件。

例如,创建一个表单使其拥有2个编辑框,当在第2个编辑框中输入字符时,要求即时显示在第1个编辑框中。

编写第2个编辑框的InteractiveChange事件代码:

this.parent.edit1.value=this.value

7.When

在控件接收焦点之前此事件发生。该事件应用于复选框、组合框、命令按钮、命令组、编辑框、表格、列表框、选项按钮组、微调框、文本框。

对于列表框控件,每当用户单击列表中的项或用箭头键移动,使焦点在项之间移动时,When事件发生。

对所有其他控件,当试图把焦点移动到控件上时,When事件发生。

8.Valid事件

在控件失去焦点之前发生。该事件的应用范围及其处理程序的语法与When事件类似。若Valid事件返回“真”(.T.),表明控件失去了焦点;若返回“假”(.F.),则说明控件没有失去焦点。

Valid事件也可以返回数值:若返回0,则控件没有失去焦点;若返回正值,则该值指定焦点向前移动的控件数;若返回负值,则该值指定焦点向后移动的控件数。

9.GotFocus

当用户通过操作或执行程序代码使对象接收到焦点时,此事件发生。

对象接收到焦点时,GotFocus事件用来指定要发生的动作。例如,通过为表单中的每个控件附加Got Focus事件,可以显示简单说明或状态栏信息以指导用户;也可以通过激活、废止或显示依赖于拥有焦点控件的其他控件,提供可视化的提示。

当表单没有控件,或者它的所有控件已废止或不可见时,此表单才能接收焦点。只有当对象的Enabled属性和Visible属性均设置为“真”(.T.)时,此对象才能接收焦点。要为焦点的移动定制键盘操作方式,可以为表单上的控件设置“Tab键次序”或指定访问键,在控件所在的容器Activate事件后,发生Got Focus事件。

10.Init

在创建对象时发生。对于表单集和其他容器对象来说,容器中对象的Init事件在容器的Init事件之前触发,因此,容器的Init事件可以访问容器中的对象。例如,在表单的Init事件处理程序中可以处理表单上的任意一个控件对象。容器中对象的Init事件的发生顺序与它们添加到容器中的顺序相同。

如果不创建控件,可在Init事件中返回“假”(.F.),这时不触发Destroy事件。

11.Destroy

当释放一个对象的实例时发生。一个容器对象的Destroy事件在它所包含的任何一个对象的Destroy事件之前触发,容器的Destroy事件在它所包含的各对象释放之前可以引用它们。

12.Error

当某方法在运行出错时,此事件发生。

Error事件使得对象可以对错误进行处理。此事件忽略当前的ON ERROR例程,并允许各个对象在内部俘获并处理错误。

只有错误发生在代码中时,才调用Error事件。

如果正在处理错误时,Error事件过程中又发生了第二个错误,VFP将调用ON ERROR例程。如果ON ERROR例程不存在,VFP将挂起程序并报告错误,如同Error事件和ON ERROR例程不存在一样。

二、常用的方法

VFP中常用的方法详见表8-6。

表8-6 常用的方法

img297

1.Refresh方法

Refresh方法用于重画表单或控件,并刷新所有值。

可使用Refresh方法强制地完全重画表单或控件,并更新控件的值。若要在加载另一个表单的同时显示某个表单,或更新控件的内容时,Refresh方法很有用。刷新表单的同时,也刷新表单上所有的控件;刷新页框时,只刷新活动的页。要更新组合框或列表框的内容,须用Requery方法。

2.Release方法

Release方法用于从内存中释放表单集或表单。

当用DO FORM命令创建表单集或表单,并且不存在可引用该表单集或表单的变量时,Release方法很有效。可以使用Screen对象的Forms集合找到表单集或表单,并调用其Release方法。

3.Show方法

Show方法是显示一个表单,并且确定是模式表单还是无模式表单。其调用语法为:

[FormSet.]Object.Show([nStyle])

其中,参数nStyle确定如何显示表单。NStyle参数为1时,表单为模式表单,只有隐藏或释放模式表单之后,用户的输入(键盘或鼠标)才能被其他表单或菜单接收;nStyle参数为2(默认值)时,表单为无模式表单,遇到Show方法之后出现的代码时就执行代码。如果nStyle省略,表单按Window Type属性指定的样式显示。

Show方法把表单或表单集的Visible属性设置为“真”(.T.),并使表单成为活动的对象。

如果表单的Visible属性已经设置为“真”(.T.),则Show方法使它成为活动对象。如果激活的是表单集,则表单集中最近一个活动表单成为活动表单;如果没有活动表单,则第一个添加到表单集类定义中的表单成为活动表单。表单集中包含的表单保留Visib1e属性设置。

如果表单的Visible属性设置为“假”(.F.),表单集的Show方法不显示这个表单。所有表单集中的表单采取表单集的形式。例如,如果表单集为模式表单集,则所有的表单都为模式表单。

4.Hide方法

设置Visible属性=.F.,隐藏表单、表单集或工具栏。

表单被隐藏后,用户不可访问它的控件,但是这些控件仍然可用,并且可以在代码中访问它们。虽然这些控件是不可见的,但这些保存在不可见表单中的控件仍然保留自己的Visible属性设置值。

5.SetFocus方法

SetFocus方法是为一个控件指定焦点。

如果控件的Enabled或Visible属性设置为“假”(.F.),或者控件的When事件返回“假”(.F.),则不能给一个控件指定焦点;如果Enabled或Visible属性已设置为“假”(.F.),则控件在使用Set Focus方法接受焦点之前,首先必须把它们设置为“真”(.T.)。

6.Set All方法

Set All方法是为容器对象中的所有控件或某类控件指定一个属性设置。其调用语法为:

Container.Set All(cProperty,Value[,cClass])

其中,参数Cproperty指定要设置的属性,Value指定属性的新值,Value的数据类型取决于要设置的属性;cClass指定类名。

例如,创建一个表单,添加表格并绑定XS表,编写其Click事件代码如下:

thisform.grid1.setall("BackColor",rgb(255,0,0),"column")

thisform.setall("foreColor",rgb(0,255,0))

7.Add Object方法

AddObject方法是在运行时向容器对象中添加对象。其调用语法为:

Object.AddObject(c Name,cClass[,cOLEClass][,aInit1,aInit2...])

其中,参数c Name指定引用新对象的名称,cClass指定添加对象所在的类,cOLEClass指定添加对象的OLE类,aInit1、aInit2...指定传给新对象的Init事件的参数。

调用AddObject方法时,将触发新添加对象的Init事件。在表单集中加入表单时,Load事件在Init事件之前发生。当用AddObject方法往容器中加入对象时,对象的Visible属性设置为“假”(.F.),因此可以设置对象的属性,而不看更改对象外观时的一些中间效果。

8.RemoveObject方法

RemoveObject方法是运行时从容器对象中删除一个指定的对象。对象删除后,便从屏幕上消失,并且不能再引用。其调用语法为:

Object.RemoveObject(cObject Name)

其中,参数cObject指定要删除的对象名,如果指定对象不存在,则会出错。

例:thisform.Removeobject("command3")

9.AddColumn方法

AddColumn方法是向表格控件中添加列对象。其调用语法为:

Grid.AddColumn(nIndex)

其中,参数nIndex指定一个表示位置的数,新列将添加到表格中的此位置上,原有的列向右移动,但是ColumnCount属性的值不增加。

10.DeleteColumn方法

DeleteColumn方法是从一个表格控件中删除一个列对象。其调用语法为:

Gride.DeleteColumn[(nIndex)]

其中,参数nIndex指定在表格中的列的编号。如果不指定nIndex,就删除表格中活动的列。

11.AddItem方法

AddItem方法是在组合框或列表框中添加一个新数据项,并且可以指定数据项索引。其调用语法为:

Control.AddItem(cItem[,nIndex][,nColumn])

其中,参数cItem指定添加到控件中的字符串表达式;nIndex指定控件中放置数据项的位置;Column指定控件的列,新数据项加入到此列中。

12.RemoveItem方法

RemoveItem方法是从组合框或列表框中移去一项。其调用语法为:

Control.RmoveItem(nIndex)

其中,参数nIndex指定一个整数,它对应于被移去项在控件中的显示顺序。对于列表框或组合框中的第一项,nIndex=1。

13.Box方法

Box方法是在表单对象上画矩形。其调用语法为:

Object.Box(n XCoord1,n YCoord1,n XCoord2,n YCoord2)

其中,参数n XCoord1、n YCoordl指定矩形起始点的坐标(如果省略了这些参数,则使用Current X和Current Y值),度量单位由表单的ScaleMode方法确定。 n XCoord2、n YCoord2指定矩形的终点。

矩形的线宽由Draw Width属性确定,如何在背景上绘出一个矩形,取决于Draw Mode 和DrawStyle属性设置。

14.Circle方法

Circle方法是在表单上画一个圆或椭圆。其调用语法为:

Object.Circle(nRadius,n XCood,n YCood[,n Aspect])

其中,参数nRadius指定圆或椭圆的半径;n XCood、n YCoord指定圆或椭圆的中心坐标,度量单位由表单的Scale Mode属性确定;n Aspect指定圆的纵横比,当纵横比等于1.0时(默认值),生成一个正圆(非椭圆);大于1.0时,将生成一个垂直方向的椭圆;小于1.0时,将生成一个水平方向的椭圆。

当激活Circle方法时,Current X和Current Y属性被设置为中心点参数:n XCoord,n YCoord。要控制所画圆或椭圆的线宽,可设置Draw Width属性;要控制在背景中画圆的方式,可设置haw Mode和Drawstyle属性;要填充圆,可设置表单的FillColor和FillStyle属性。

15.Line方法

Line方法是在表单对象中画一条线。其调用语法为:

Object.Line(n XCoord1,n YCoord1,n XCcord2,n YCoord2)

16.Clear方法

Clear方法是清除组合框或列表框控件中的内容。

为使Clear方法有效,必须将RowSource属性设置为0(无)或为1(值)。

17.Cls方法

Cls方法是清除表单中的图形和文本。其调用语法为:

Object.Cls

Cls清除运行期间图形和打印语句生成的文本和图形。Cls方法不影响设计期间用Picture属性和控件创建并放置在表单上的背景位图。Cls方法将Current X和Current Y属性重新设置为0。

18.Reset方法

Reset方法是重置计时器控件,让它从0开始。其调用语法为:

Timer.Reset

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈