news 2026/2/19 14:20:29

VFP的程序设计基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VFP的程序设计基础

上一讲心铃和大家一起建立了一个VFP的应用程序,但若要深入地理解程序是如何工作的,乃至编写具有自己风格的应用程序,还必须了解一些VFP程序设计的基础知识。本讲主要介绍VFP中面向对象的有关内容。

一.对象

在VFP中,包含在应用程序中的表单及各种控件都是对象。对象是包含数据和代码的实体。在程序设计中,用属性、事件和方法来说明对象,属性就是对象的数据,事件和方法则是对象中包含的代码。

属性

每个对象都具有属性,属性表明了对象的一些基本特征,如大小、颜色、所处的位置等。表5.1列出了命令按钮对象的部分常用属性:

表5.1 命令按钮的常用属性

属性

说明

Caption

显示在按钮上的标题

Name

按钮对象的名称

FontName

按钮的字体名

ForeColor

前景颜色

表5.2 命令按钮的典型事件

事件

说明

Init

对象被创建时激活

Click

单击对象时激活

MouseDown

按下鼠标按钮时激活

事件

事件是一种预先定义好的特定动作,被用户或系统激活,每个对象都可以对事件的动作进行识别和响应。在多数情况下,事件是由用户的交互行为产生的,例如,对一部电话来说,当用户提起听筒时,便激发了一个事件,同样,当用户拨号打电话时也激发了若干事件。事件集合是固定的,用户不能进行扩充。表5.2列出了命令按钮的典型事件。

方法

方法实际上就是对象的内部函数,每个类型的对象都有它自己的方法集。例如在命令按钮对象中,调用Move方法可以移动按钮的位置。与事件不同的是,方法可以由用户进行扩展。表5.3列出了表单对象的常用方法。

表5.3 表单对象的常用方法。

方法

说明

Refresh

重画表单和控制,刷新表单中的所有值

Show

显示表单

Hide

隐藏表单

请用以下任一种方法打开我们在上一讲建立的“学生情况”表单。

在项目管理器的“学生情况”表单项上双击。

先选中“学生情况”表单项,然后在单击“修改”命令按钮,或回车。

先选中“学生情况”表单项,然后在VFP菜单上选择“项目/修改文件”。

如果项目管理器处于最小化的状态,还可以试试鼠标右键。

在表单中“学号:”字样处单击,在它的周围会出现一系列的小方块,这说明它是一个对象。现在我们来看看它的属性,用鼠标右键单击“学号:”,在弹出的快捷菜单中选择“属性”,屏幕上将出现如图5.1所示的“属性”窗口。用鼠标右键单击“属性”窗口的标题区,在弹出的快捷菜单中,可以选择您喜欢的显示方式。

属性窗口由包含五个卡片的页框组成:

全部:显示所有的属性、事件和方法。

数据:只显示对象数据的源、输入格式、长度,字段是否只读等。

方法程序:只显示方法和事件。其中有“Event”的项是事件,其余的是方法。

布局:只显示颜色、可视性、字体,以及其它一些与对象外观相关的一些属性。

其他:只显示类信息,拖动方式,状态的允许与禁止,对象名以及其它的一些内容。

每个页框上的每一页的属性列表依赖于所选的对象类型。对对象进行选择的方法有两种:可以直接在对象上单击,也可以从对象名列表中挑选。例如,在表单的背景中的任意处单击,表单的名字Form1将出现在对象名框中。

二.处理对象

当一个对象被选中时,如果要改变它的属性,则先在“属性”窗口的属性列表中选择要改变的属性,然后在属性值设置框中输入或选取一个值即可。

用对象编程的大量工作是了解存在哪些属性,可以赋予什么值,基于所赋予的值将会产生什么效果。例如,透明的对象允许背景颜色透过来,不透明的对象具有自己的背景颜色。仅仅通过把对象的BackStyle属性从不透明改为透明,就可以很任意地修改一个对象的外观和特性。

当然有时候,我们也需要在程序中以命令方式来处理对象,在这种情况下,首先需要知道对象相对于容器层次的关系。如图5.2所示,FormSet1是一个表单集对象,Form1是包含在FormSet1中的一个表单对象,Txt1和Group1是包含在Form1中的文本框对象和选项按钮组对象,Opt1和Opt2是包含在Group1中的选项按钮对象。其中FormSet1、Form1和Group1叫做容器对象,而Txt1和Opt1、Opt2叫做控制对象。容器对象可以包含其他的对象,而控制对象则不能。对于Txt1对象,我们可以用如下形式访问:

FormSet1.Form1.Txt1

若要访问Opt2对象,需用如下形式:

FormSet1.Form1.Group1.Opt2

在容器层次中访问对象时,还可以通过快捷方式访问到对象,下表列出了可以快捷访问对象的关键字:

关键字

引用关系

THIS

该对象本身

THISFORM

该对象所在的表单

THISFORMSET

该对象所在的表单集

Parent

包含该对象的直接容器

假使在对象Txt1中要访问对象Group1,则可以使用:

THISFORM.Group1 或者THIS.Parent.Group1

其中,THIS就代表Txt1对象,THISFORM和THIS.Parent都是指表单Form1对象。

以命令方式设置对象属性的语法形式为:

Object.Property = Value

还以图5.2为例:

FormSet1.Form1.Txt1.Enabled = .f. &&使Txt1不可用

有时需要同时设置一个对象的多个属性,这时我们可采用WITH…ENDWITH结构,如:

WITH FormSet1.Form1.Txt1 .Visible = .t. &&使其可见 .Enabled = .t. &&使其可用 .backcolor = rgb(192,192,192) &&使其背景为浅灰色ENDWITH

三.响应事件和调用方法

当对象的事件发生时,该事件的过程代码就被自动执行,例如用户单击命令按钮,将产生一个Click事件,命令按钮的Click事件代码被执行。

下面几点需要特别强调说明一下:

事件一般是由用户的交互方式触发的,如单击或双击鼠标,按下键盘上的键,也有些是被系统触发的,象计时器控制中的Timer事件。

在没有事件发生时,用户也可以显式地调用与事件相关的过程,如语句:

Parent.Object.Activate

将使Activate事件代码被执行,但事件并不发生。

对象的方法需要显式地被调用,且可以在程序的任何地方。下面的语句调用Show方法来显示表单,并设置输入焦点在命令按钮上:

FormSet1.Form1.ShowFormSet1.Form1.ComdBut1.SetFocus

如果在调用方法式需要传递参数,应该将参数包括在方法名后的圆括号中,如果是调用方法后有返回值,即使没有传递参数,在方法名后也要加圆括号。示例如下:

THIS.Move(100,50) &&传递参数给方法

THIS.Caption=THISFORM.GetNewCaption() &&方法的返回值作为对象的新标题

四.对事件的进一步讨论

VFP提供了比较全面的事件处理机制,使得程序员能够较容易地为用户设计基于事件驱动的、内容更丰富的交互环境。为了达到这一点,必须对VFP的事件模型有深入的了解。

1.VFP中的事件

每一个类都有自己的事件集合,不同的类有不同的事件种类,如计时器具有Timer事件,而其它的类则没有,但也有一些事件是大多数类都具有的,下表是一些通常使用到的、大多数类都具有的VFP核心事件:

事件

何时被激活

Init

对象被创建时

Destroy

对象从内存中释放时

error

类中的事件或方法过程中发生错误时

Load

表单或表单集被加载到内存中

Unload

从内存中释放表单或表单集

Click

用鼠标左键单击对象

GetFocus

按TAB键或单击对象,或在程序中调用SetFocus方法,使对象接受输入焦点

LostFocus

对象失去输入焦点

InteractiveChange

以交互方式改变对象的值

表5.5 VFP核心事件

2.容器与对象事件

在实际应用中,控制对象一般都被包含在容器对象中,如命令按钮、文本框包含在表单中,页面控制包含在页框中等,那么当用户单击命令按钮时,是命令按钮的Click事件被触发,还是表单的Click事件被触发,或者是两个对象的Click事件都被触发?

实际上,当事件发生时,只有与事件相关联的最里层对象识别该事件,更高层的容器不识别这个事件。因此当用户单击命令按钮时,只有该命令按钮的Click事件被触发,而包含命令按钮的容器——表单,则不识别这个Click事件。即使该命令按钮没有与Click事件相关联的事件代码,而表单有自己的Click事件代码,也不会执行表单的事件代码。

有一个例外的情况,如果为选项按钮组或命令按钮组容器编写了事件代码,而组中的按钮没有相应的事件代码,则当按钮的事件发生时,将执行按钮组的事件代码。如果组中的按钮有相应的事件代码,就不执行组的事件代码而执行按钮本身的事件代码。

3.事件的顺序

基于事件驱动的编程技术不同于传统的过程化程序设计,程序的执行顺序不是在设计时确定的,而是取决于事件的顺序。有时一个用户动作只触发一个事件,而有些情况下会有多个事件接连发生,如包含多个对象的表单被启动运行的时候,这样的情况下,了解事件发生的顺序是很重要的,否则就无法确定该往哪个事件中写入代码。

下面列出当启动运行VFP的表单时有关对象的事件顺序,其他的事件依赖于用户的动作或系统的反应(如计时器的Timer事件)。

对象

发生的事件

数据环境Data environment

BeforeOpenTables

表单集FormSet

Load

表单Form

Load

数据环境中的临时表Data environment cursors

Inti

Data environment

Inti

表单中的对象Objects

Inti

Form

Inti

FormSet

Inti

Activate

Form

Activate

Objects

When

GotFocus

Message

Valid

Lostfocus

Destroy

Form

Unload

FormSet

Unload

Data environment

AfterCloseTables

Destroy

Data environment cursors

Destroy

表5.6 运行表单时的事件顺序

通过本讲的讲述,相信大家已初步熟悉了VFP中的面向对象的有关内容。您可以试着用“属性”窗口来修改“学生情况”表单和它包含的对象的属性,只有多加练习才能加深理解。OK,See you later!

心铃

猫猫的心里话

加菲猫的VFP|狐友会社群接收投稿啦

加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。

商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。

暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。

如何帮助使用VFP的人?

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。

我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"

我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

2025年狐友会社群会员继续招募中

社群会员获取的权益有:

祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。

开放的录播课程有:

微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。

源码类资源有:

支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。

会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/15 5:58:36

RAX3000M刷机终极指南:从零开始玩转OpenWrt系统

RAX3000M刷机终极指南:从零开始玩转OpenWrt系统 【免费下载链接】Actions-rax3000m-emmc Build ImmortalWrt for CMCC RAX3000M eMMC version using GitHub Actions 项目地址: https://gitcode.com/gh_mirrors/ac/Actions-rax3000m-emmc 想要让RAX3000M路由器…

作者头像 李华
网站建设 2026/2/14 3:38:11

软件产品设计中用户体验提升的主要问题分析

软件产品设计中用户体验的提升面临多维度挑战,这些问题不仅存在于产品开发的单一环节,而是贯穿整个设计流程的系统性障碍。用户体验的提升需要跨越用户研究与需求理解偏差、界面与交互流程的复杂性、可用性与易操作性的设计障碍、视觉设计与品牌体验的整…

作者头像 李华
网站建设 2026/2/13 14:37:12

Typst数学排版终极指南:告别对齐困扰,打造完美公式

Typst数学排版终极指南:告别对齐困扰,打造完美公式 【免费下载链接】typst A new markup-based typesetting system that is powerful and easy to learn. 项目地址: https://gitcode.com/GitHub_Trending/ty/typst 还在为数学公式的括号错位、盒…

作者头像 李华
网站建设 2026/2/8 4:43:18

22、企业环境下迁移 Windows 应用到 Linux 及瘦客户端计算的全面解析

企业环境下迁移 Windows 应用到 Linux 及瘦客户端计算的全面解析 在企业的 IT 环境中,将 Windows 应用迁移到 Linux 以及采用瘦客户端计算模式是两个重要的话题。下面我们将详细探讨这两个方面的相关内容。 Win4Lin 产品分析 Win4Lin 产品对于那些有现有 Windows 会话和软件…

作者头像 李华
网站建设 2026/2/14 15:27:45

24、探索瘦客户端计算与Linux桌面资源

探索瘦客户端计算与Linux桌面资源 瘦客户端计算的优势 在当今的计算领域,企业面临着在降低成本的同时提升性能的挑战。而瘦客户端计算为企业提供了一个有效的解决方案。使用瘦客户端供应商的好处不仅体现在硬件采购方面,还在于有机会借鉴其在安装和设计瘦客户端网络方面的专…

作者头像 李华
网站建设 2026/2/19 7:38:49

IT66122FN-300:低功耗发射器,配备HDMI 1.4 3D

IT66122-300是一款高性能低功耗单通道HDMI发射机,完全符合HDMI 1.3a、HDCP 1.2标准,并向下兼容DVI 1.0规范。IT66122-300还提供HDMI 1.4 3D功能,通过HDMI链路实现直接3D显示。它为数字电视兼容的消费电子产品(如机顶盒、DVD播放器…

作者头像 李华