⼀.对象的事件是对象的动作和⾏为.vfp中对象的事件可通过⽤户操作、程序代码或系统触发.只有当事件发⽣时,事件的程序才会运⾏.如果没有任何事件发⽣,则整个程序就处于停滞状态.⽐如在第⼀章所举的实例中,运⾏表单后,如果我们什么也不做,则程序处于停顿状态.我们在\"半径\"⽂本框中输⼊⼀个半径,然后单击\"计算\"按钮,则触发命令按钮的click事件,内部的代码得到执⾏,计算出圆的⾯积显⽰在第⼆个⽂本框中.所以说,vfp程序是由事件驱动的程序.
  ⼆.事件的分类:
  1.⿏标事件:所谓⿏标事件,就是在vfp应⽤程序的运⾏界⾯中,⽤⿏标对其中的对象进⾏操作所触发和事件.
  (1).Click事件:是⿏标单击时所产⽣的事件.click事件既可由⽤户触发,也可由执⾏事件的程序代码触发.
  (2).Dbclick事件:双击⿏标时产⽣的事件.
  (3).mousedown和mouseup事件:当⿏标指针指向对象并按下⿏标左键时触发mousedown事件,当释放⿏标左键时触发mouseup事件.
  (4).mousemove事件:在对象上移动⿏标指针时产⽣的事件.
mousemove是什么键  (5).dragdrop事件:⽤⿏标拖动对象时产⽣的事件.
  (6).downclick和upclick事件:当⽤⿏标单击组合框、列表框或微调器的向下箭头时,触发downclick事件;单击向上箭头时,触发upclick事件.
  2.键盘事件keypress:单击某⼀键时产⽣的事件.通常对获取焦点的对象,当按下键盘键并放开时触发keypress事件.参数:键ASCⅡ码,shiftctrlalt状态
  其中,shiftctrlalt状态为三键值的和.shift值为1,ctrl值为2,alt值为4
  3.改变对象内容事件interactivechange:当⽤操作改变对象内容时交触发此事件,⽐如改变⽂本框中的内容将触发⽂本框的interactivechange事件.
  4.对象的焦点事件:当对象取得焦点(focus)时,该对象将成为当前活动对象,操作将⾯向该对象.若⽂本框取得焦点,光标将在⽂本框中闪烁,指明编辑⽂本的当前位置.当命令按钮获得焦点时,按钮框内出现虚线框.属于控件焦点的事件有:获取焦点,失去焦点以及获取和失去焦点前触发的事件.
  (1).获取焦点事件gotfocus:当对象获取焦点时将触发gotfocus事件,⽽获取焦点的⽅法可以通过按tab键,⿏标单击对象或对对象使⽤setfocus⽅法.注意:只有对象的enabled和visible属性为\"真\"(.T.)时,对象才能获得焦点.
  (2).失去焦点事件lostfocus:当对象失去焦点时将触发该事件.对象可能因操作失去焦点,例如重新选择对象或单击另⼀对象;也可能在程序代码中执⾏获取焦点的⽅法setfocus.失去焦点的事件代码常⽤于取消gotfocus事件代码所做的⼯作,例如取消在执⾏gotfocus事件过程代码所提供的指导⽤户操作信息.
  (3).when事件:此事件在对象获取焦点前发⽣.如果when事件返回真值,则对象可获取焦点;否则对象不能获取焦点.
  (4).vaid事件:在对象失去焦点前触发此事件,以控制对象是否真的失去焦点.若vaid返回真值,对象才可失去焦点;否则对象不会失去焦点.
  5.表单事件:
  (1).load事件:load事件在创建表单集或表单之前触发,其事件过程代码常⽤于做表单集或表单的初始化⼯作.如果是表单集,则先触发表单集的load事件,然后触发表单的load事件.
  (2).unload事件:unload事件是释放表单集或表单之前被触发的最后⼀个事件.在触发该事件之前先触发表单或表单集的destroy事件,使对象⽆效.例如,释放表单集时触发的destroy和unload事件顺序如下所⽰:
  表单集destroy→表单destroy→表单中各对象destroy→表单unload→表单集unload
  (3).activate事件:当激活表单等对象时触发activate事件.通常可在调⽤对象的show⽅法时触发该事件⽤来激活或显⽰对象.
  (4).deactivate事件:当容器对象没有焦点⽽处于⾮活动状态时触发deactivate事件.常见于当激活新对象时,触发原活动对象的deactivate事件,同时触发新对象的activate事件.
  6.其它事件:
  (1).timer事件:在每次计时时间到达时触发timer事件,计时间隔由timer控件的interval属性来指定.
  (2).init事件:在对象建⽴时,其init事件被触发.通常在init事件代码中编写有关对象的初始化的操作,如加载图⽚对象中的图⽚等.对容器对象来说,⾸先触发的是对象的init事件,然后触发容器的init事件.因此,容器的init事件代码可访问容器中的每个对象.此外,容器中对象的init事件,与它们被添加到容器中的顺序相同.
  (3).destroy事件:在对象被释放前触发其destroy事件,使该对象⽆效.如果对象是⼀个容器,则⾸先触发其中的对象的destroy 事件,然后触发容器对象的destroy事件.
  (4).error事件:此事件在执⾏对象的⽅法程序代码时出错时被触发.可⽤该事件的程序代码处理错误.
  7.为事件编写代码:如果没有为对象的某些事件编写代码,当事件发⽣时系统将不会发⽣任何操作.⽐如,不给命令按钮添加任何代码,运⾏时,⽤户即使单击该命令按钮,也不会产⽣任何操作.
  (1).在设计时,要为⼀个对象的某个事件添加代码,在需双击该对象,即会弹出代码窗⼝,在该窗⼝上⽅的\"过程\"列表中和选择事件名称,在下⽅添加所需的代码.
  (2).在编写事件代码时,要考虑事件发⽣的顺序,特别要注意以下两点:
  A.在运⾏表单集或表单时,⾸先发⽣的是load事件,在load事件发⽣时还没有创建任何对象,因此在load事件中不能对对象做任何处理,⽐如,在表单的load事件中为表单中的⽂本框等控件设置属性是错误的.
  B.表单中对象的init事件,发⽣在表单的init事件之前,所以可在表单的init事件代码中设置表单中的诸如⽂本框之类的控件的属性.