-
vfp教程之用Visual FoxPro 5.0 设计数据文件结构浏览
在用VFP进行程序设计时,不可避免地涉及到数据表和自由表本身的操作,例如我们至少需要随时知道这些数据表的结构,尽管这些数据表是我们自己设计的,但如果文件多了,时间长了,就完全有可能记不清楚,特别是分析别人的程序时,这个问题就显得特别突出,为此,我们可以设计一个程序来解决这个问题,由于这类程序不依赖于某一具体环境,并具有很强的独立性和灵活性,因此我们有必要将它设计成一个自定义类,从而一劳永逸地使用它:
一.新建一个类
打开"文件/新建.../类",类名为list_stru,派生于"Container"(容器),在"存储于..."中选择一个适当的目录来保存这个自定义类.然后单击"确定".(如图所示)
二.设置自定义类list_stru的属性
进入类设计器后,接着设置Container的属性:BackStyle为0(透明),BorderWidth为2,SpecialEffect为0(凹起)
三.设置显示文件名的列表框对象(LIST1)
添加一个名为list1的list对象,该对象用来选择需显示结构的数据表文件名.
再按如下方法设置该对象的一些属性:
(1)RowSourceType=7 (文件)
即该对象的内容来源于磁盘文件
(2)RowSource=*.dbf
只显示后缀名为DBF的文件
(3)编写当list1中的项目被选择后所要发生的代码,这可以通过InteractiveChange事件来实现:
InteractiveChange Event
Local curpath && 定义一变量
curpath=this.list(2) && 返回所选取的文件的路径
set defa to (curpath) && 指定默认路径
if .not.'['$this.value && 如果所选择的项目是一个目录(即包含有'['字符)则不执行下列操作
use (this.value)
this.parent.list2.rowsourcetype=0
this.parent.list2.clear this.parent.list2.rowsourcetype=8
this.parent.list2.rowsource=substr(this.value,1,len(this.value)-4) && 用SUBSTR函数取得完整文件名
this.parent.list2.listindex=1
endif
示例图(设计时)
下面对该程序作一些简要说明:
A.将LIST对象的RowSourceType属性为7(文件),显示磁盘文件时,第一列为盘符,第二列才为盘符和路径,因此需用this.list(2)来返回完整的文件路径,然后用Set defa to (curpath)来转换到相应的路径,注意此处必须用名称表达式()将curpath括起来,它相当于宏代换&,后面的use (this.value)语句也是这个意思
B.在操作时我们可能要不断地选择文件名并在list2中显示其结构,因此需要不断地更新list2的RowSource内容,这是通过this.parent.list2.clear来实现的,但是在使用clear方法前,必须将RowSourceType属性设置为0 (无),否则是无效操作,清除内容后,再将RowSourceType属性设置为8(结构)即可
C.在设置了RowSourceType属性后,再用RowSource属性定义相应源文件名称,即substr(this.value,1,len(this.value)-4)语句
四.添加显示文件结构的列表框对象(LIST2)
添加名为LIST2的列表框对象,用于显示文件结构,但是不必再设置它的属性,因为其RowSourceType和RowSource属性已经在LIST1的InteractiveChange事件中定义了。
最后,我们再加上相应的说明性的标签对象和其它适当的shape对象来美化界面,保存起来,这个类就可以使用了,另外,以上程序中包括了一些有关文件操作和列表框(组合框)对象的关键用法,如果能够加以灵活使用,对以后的程序设计会有很大的帮助
一.新建一个类
打开"文件/新建.../类",类名为list_stru,派生于"Container"(容器),在"存储于..."中选择一个适当的目录来保存这个自定义类.然后单击"确定".(如图所示)
二.设置自定义类list_stru的属性
进入类设计器后,接着设置Container的属性:BackStyle为0(透明),BorderWidth为2,SpecialEffect为0(凹起)
三.设置显示文件名的列表框对象(LIST1)
添加一个名为list1的list对象,该对象用来选择需显示结构的数据表文件名.
再按如下方法设置该对象的一些属性:
(1)RowSourceType=7 (文件)
即该对象的内容来源于磁盘文件
(2)RowSource=*.dbf
只显示后缀名为DBF的文件
(3)编写当list1中的项目被选择后所要发生的代码,这可以通过InteractiveChange事件来实现:
InteractiveChange Event
Local curpath && 定义一变量
curpath=this.list(2) && 返回所选取的文件的路径
set defa to (curpath) && 指定默认路径
if .not.'['$this.value && 如果所选择的项目是一个目录(即包含有'['字符)则不执行下列操作
use (this.value)
this.parent.list2.rowsourcetype=0
this.parent.list2.clear this.parent.list2.rowsourcetype=8
this.parent.list2.rowsource=substr(this.value,1,len(this.value)-4) && 用SUBSTR函数取得完整文件名
this.parent.list2.listindex=1
endif
示例图(设计时)
下面对该程序作一些简要说明:
A.将LIST对象的RowSourceType属性为7(文件),显示磁盘文件时,第一列为盘符,第二列才为盘符和路径,因此需用this.list(2)来返回完整的文件路径,然后用Set defa to (curpath)来转换到相应的路径,注意此处必须用名称表达式()将curpath括起来,它相当于宏代换&,后面的use (this.value)语句也是这个意思
B.在操作时我们可能要不断地选择文件名并在list2中显示其结构,因此需要不断地更新list2的RowSource内容,这是通过this.parent.list2.clear来实现的,但是在使用clear方法前,必须将RowSourceType属性设置为0 (无),否则是无效操作,清除内容后,再将RowSourceType属性设置为8(结构)即可
C.在设置了RowSourceType属性后,再用RowSource属性定义相应源文件名称,即substr(this.value,1,len(this.value)-4)语句
四.添加显示文件结构的列表框对象(LIST2)
添加名为LIST2的列表框对象,用于显示文件结构,但是不必再设置它的属性,因为其RowSourceType和RowSource属性已经在LIST1的InteractiveChange事件中定义了。
最后,我们再加上相应的说明性的标签对象和其它适当的shape对象来美化界面,保存起来,这个类就可以使用了,另外,以上程序中包括了一些有关文件操作和列表框(组合框)对象的关键用法,如果能够加以灵活使用,对以后的程序设计会有很大的帮助
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式