2、事件驱动程序设计基本操作 VFP6提供了真正的无模式操作,使用户不仅能够轻松地进行多个 表单的自动协调,而且可以很容易地同时运行一个表单的多个实 例。VFP6还提供了事件处理机制,可以给用户提供一个更为丰富 的交互环境 事件驱动程序设计基本操作,关键是确定事件以及对事件发生时 应作出的反应。一个事件发生时,VFP6系统应作出的反应,仍可 通过一个过程来实现,即用过程化程序设计的方法来处理某一事 件发生时系统应作出的响应。 通常,VFP6程序设计时应考虑的事件有: (1)核心事件表5-1是VFP6中核心事件列表,这些事件适用于大多 数的控件。 (2)容器事件和对象事件 为控件编写事件代码时,请注意以下两条规则: ■容器不处理与所包含的控件相关联的事件; ■若没有与某控件相关联的事件代码,则ⅴFP在该控件所在类层 次结构中逐层向上检查是否有与该事件相关联的代码。 2021-2-20 Visual Foxpro60程序设计
2021-2-20 Visual FoxPro 6.0程序设计 11 2、事件驱动程序设计基本操作 VFP6提供了真正的无模式操作,使用户不仅能够轻松地进行多个 表单的自动协调,而且可以很容易地同时运行一个表单的多个实 例。VFP6还提供了事件处理机制,可以给用户提供一个更为丰富 的交互环境。 事件驱动程序设计基本操作,关键是确定事件以及对事件发生时 应作出的反应。一个事件发生时,VFP6系统应作出的反应,仍可 通过一个过程来实现,即用过程化程序设计的方法来处理某一事 件发生时系统应作出的响应。 通常,VFP6程序设计时应考虑的事件有: (1)核心事件 表5-1是VFP6中核心事件列表,这些事件适用于大多 数的控件。 (2)容器事件和对象事件 。 为控件编写事件代码时,请注意以下两条规则: ■容器不处理与所包含的控件相关联的事件; ■若没有与某控件相关联的事件代码,则VFP在该控件所在类层 次结构中逐层向上检查是否有与该事件相关联的代码
表5-1VFP6核心事件 事件 事件激发后的动作 Init 创建对象 Destroy 从内存中释放对象 Click 使用主鼠标按钮单击对象 Double click 使用主鼠标按钮双击对象 Right Click 使用辅鼠标按钮单击对象 Got Focus 由操作引起的对象接受焦点,或在代码中使用 SetFocus方法程序 Lost Focus 由操作引起的对象失去焦点 Key Press 按下或释放键 Mouse Dowm 当鼠标指针停在一个对象上时并按下鼠标按钮 Mouse move 在对象上移动鼠标 Mouse Up 当鼠标指针停在一个对象上时并释放鼠标按钮 返回165 2021-2-20 Visual Foxpro60程序设计
2021-2-20 Visual FoxPro 6.0程序设计 12 表5-1 VFP6核心事件 返 回165
当用户以任意一种方式(使用Tab键、单击鼠标等)与对象交互 时,对象事件被触发。每个对象独立接受自己的事件。 例如,在图5-2中,尽管命令按钮位于表单上,当用户单击命令 按钮时,不会触发表单的Cick事件,只触发命令按钮的 Click事 件。若没有与命令按钮相关联的 Click事件代码,尽管有与表单相 关联的 Click事件代码,当用户单击按钮时,也不会执行与表单相 关联的 Click事件代码。 Form1 这些规则也适用于表格控件 幸单具有表格事件包含列,列又包含 标头和控件。事件发生时, 命令按钮 命令按钮没有 1事伴代只有与事件相关联的最底层 对象识别该事件,更高层的 容器不识别这个事件。图5 图5-2容器、控件事件代码相对独立3演示了当用户在表格上移 动鼠标时,哪个对象处理这 个 MouseMove事件。 2021-2-20 Visual Foxpro6.0程序设计 13
2021-2-20 Visual FoxPro 6.0程序设计 13 当用户以任意一种方式(使用Tab键、单击鼠标等)与对象交互 时,对象事件被触发。每个对象独立接受自己的事件。 例如,在图5-2中,尽管命令按钮位于表单上,当用户单击命令 按钮时,不会触发表单的Click事件,只触发命令按钮的Click事 件。若没有与命令按钮相关联的Click事件代码,尽管有与表单相 关联的Click事件代码,当用户单击按钮时,也不会执行与表单相 关联的Click事件代码。 图5-2容器、控件事件代码相对独立 这些规则也适用于表格控件。 表格事件包含列,列又包含 标头和控件。事件发生时, 只有与事件相关联的最底层 对象识别该事件,更高层的 容器不识别这个事件。图5- 3演示了当用户在表格上移 动鼠标时,哪个对象处理这 个MouseMove事件
F 表头 Mouse‰ove事件 使名 李娟 99045001 表格 Mousemove事佯 列 sehore事件 99043010 表格》 usemove事件 Check挖件 mousemove事佯 谢少文 98040522 表单 Mousemove事伴 欧阳南 98052031 表单 mousemove事佯 李磊 99060124 图5-3表格的 Mouse move事件 例如:在一个命令按钮上,按下鼠标左键并拖动鼠标指针离 开命令按钮,尽管鼠标指针可能已经在表单上,但这个命令 按钮的 Mouse move事件还在不断产生。当在表单上而不是在 命令按钮上释放鼠标时,发生的 MouseUp事件是与命令按钮 相关联的,而不是与表单的 MouseUp事件相关联 2021-2-20 Visual Foxpro60程序设计
2021-2-20 Visual FoxPro 6.0程序设计 14 图5-3 表格的MouseMove事件 例如:在一个命令按钮上,按下鼠标左键并拖动鼠标指针离 开命令按钮,尽管鼠标指针可能已经在表单上,但这个命令 按钮的MouseMove事件还在不断产生。当在表单上而不是在 命令按钮上释放鼠标时,发生的MouseUp事件是与命令按钮 相关联的,而不是与表单的MouseUp事件相关联
(3)VFP6中类和控件事件 若表单上的控件基于一个用户自定义的类,当一个事件发生时, VFP首先在该控件中查看是否有与此事件相关联的代码,若找 到,则执行它;否则,VFP将在类层次中向上一层检查。无论 VFP在类层次的哪个地方找到该事件的代码,都执行它,如图5- 4所示。 基类 命令1 父类 退出 如果对象没有 Click事件代码,则Viul FoxPro在其父类中查找 Click事件代码 For画1 上口区 退出 图5-4若没有与对象相关联的事件代码,则VFP将检查父类 2021-2-20 Visual Foxpro6.0程序设计 返
2021-2-20 Visual FoxPro 6.0程序设计 15 (3)VFP6中类和控件事件 若表单上的控件基于一个用户自定义的类,当一个事件发生时, VFP首先在该控件中查看是否有与此事件相关联的代码,若找 到,则执行它;否则,VFP将在类层次中向上一层检查。无论 VFP在类层次的哪个地方找到该事件的代码,都执行它,如图5- 4所示。 图5-4 若没有与对象相关联的事件代码,则VFP将检查父类 返 回