没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2004-02-23 21:28:00.000|阅读 1616 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
ActiveX控件早已为大多数程序开发人员作为一重要工具来使用。由于它与开发语言无关,任何支持ActiveX控件的软件平台上,都可以使用ActiveX控件。就像使用WINDOWS控件一样自如。然而,ActiveX控件在具体到某种开发工具中去使用时会遇到很多问题,这一点在许多刊物的文章都经常被提出讨论,但大多数都是针对Vc,Delphi,VB,PB等开发平台下的ActiveX控件。其实,在上述平台中使用ActiveX控件基本上能在其帮助功能中,开发人员依照其示例最终能找到ActiveX控件的属性,方法,事件的使用说明。甚至有些开发工具已将部分ActiveX控件作为其常用表单控件,使开发人员使用起来感到非常方便。
可是在VFP开发平台下,去使用ActiveX控件就不如上述开发工具那样的幸运,因为VFP对其根本就未涉及到相关语法说明和示例,使VFP开发者感到尴尬与茫然。又因,很少有介绍这方面文章。因此,笔者就以正在开发“楼盘销售软件”为例介绍一下TreeView控件在VFP中的具体使用,以供与笔者同感的VFP同仁参考。
一、 首先介绍TreeView 控件
TreeView 控件显示 Node 对象的分层列表,每个 Node 对象均由一个标签和一个可选的位图组成。TreeView 一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。
Node 对象是 TreeView 控件中的一项,它包含图像和文本。Nodes 集合包含一个或多个 Node 对象。 语法:treeview.Nodes,treeview.Nodes.Item(index)。可以使用标准的集合方法(例如 Add 和 Remove 方法)操作 Node 对象。可以按其索引或存储在 Key 属性中的唯一键来访问集合中的每个元素。为选择指定的 Node 对象,必须通过它的 Index 属性或 Key 属性的值去引用它。
在 Treeview 控件的 Nodes 集合中添加一个 Node 对象:object.Add(relative, relationship, key, text, image, selectedimage) Nodes 集合是一个基于 1 的集合。在添加 Node 对象时,它被指派一个索引号,该索引号被存储在 Node 对象的 Index 属性中。这个最新成员的 Index 属性值就是 Node 集合的 Count 属性的值。因为 Add 方法返回对新建立的 Node 对象的引用,所以使用这个引用来设置新 Node 的属性十分方便。下面介绍一下节点几个属性:
relative 是可选的。它表示已存在的 Node 对象的索引号或键值。而新节点与已存在的节点间的关系,可在下一个参数 relationship 中找到。
relationship 是可选的。它表示指定的 Node 对象的相对位置,如设置值中所述。relationship 的设置值是:
tvwFirst为常数 ,0 为值。它表示首的节点。该 Node 和在 relative 中被命名的节点位于同一层,并位于所有同层节点之前。
TvwLast为常数,1 为值。它表示最后的节点。该 Node 和在 relative 中被命名的节点位于同一层,并位于所有同层节点之后。任何连续地添加的节点可能位于最后添加的节点之后
TvwNext为常数,2 为缺省值。它表示下一个节点。该 Node 位于在 relative 中被命名的节点之后。
TvwPrevious为常数, 3为值。它表示前一个节点。该 Node 位于在 relative 中被命名的节点之前。
TvwChild为常数, 4 为缺省值。它表示子节点。该 Node 成为在 relative 中被命名的节点的子节点。
注意 如果在 relative 中没有被命名的 Node 对象,则新节点被放在节点顶层的最后位置。
key 是可选的。它表示节点中唯一的字符串,可用于用 Item 方法检索 Node。
text 是必需的。它表示在 Node 中出现的字符串,即节点的名称。
index 是整数或字符串,它唯一地标识 Nodes 集合的一个成员。整数是 Index 属性的值,字符串是 Key 属性的值。
FullPath 属性,这个属性返回在 TreeView 控件中引用的 Node 对象的完整限定路径。当赋予该属性为字符串变量时,该字符串被设为具有指定索引的 FullPath 节点。
Indentation 属性返回或设置控件中对象的缩进宽度。
LabelEdit 属性返回或设置一个值,它确定是否可以编辑在 TreeView 控件中的 Node 对象的标签。
二、源程序示例
在该程序中TreeView控件能够实现项目、楼宇、单元、楼层这样四层逐级包含的关系。用户只要简单地单击每层节点“+”/“-”就能很直观地观察到一个项目中包含几幢楼,一幢楼包含几个单元,一个单元又有多少楼层。通过与页框PAGEFRAME中每一页的表格GRID联合使用,只要双击每层节点就可在相应的表中增加记录并在GRID中显示相应的详细信息。值得说明的是该程序可以实现多个项目的显示,项目节点与项目节点之间是平行同级的关系,仅仅是第二个项目首节点排在第一个之后。而楼宇节点是项目节点的子节点,单元节点是楼宇节点的子节点,楼层节点是单元节点的子节点。
源程序1实现TreeView 控件初始化工作,即表单中的Olecontrol1.init事件填写源程序1中所有代码。源程序2实现与页框配合,显示节点相应的详细内容,即表单中的Olecontrol1.NodeClick事件填写源程序2中所有代码。
源程序1代码如下:
LOCAL
M.L_XMCOUNT,I,J,K,L,M.L_NODES,M.L_LYCOUNT,M.L_DYCOUNT,M.L_LCCOUNT
THIS.NODES.CLEAR
&&清除所有节点
THIS.LABELEDIT=1
&&节点标签可以编辑
THIS.Indentation=10 &&缩进宽度为10个象素
SELECT
SF_XMXX
set dele on
M.L_XMCOUNT=RECCOUNT()
FOR I=1 TO
M.L_XMCOUNT
SELECT SF_XMXX
GO I
if
!delete()
M.L_NODES=THIS.NODES.ADD(,,'XM'+XM_BH,XM_MC)
&&向节点集合加入第一个节点KEY=XM,TEXT=项目名称
M.L_NODES.EXPANDED=.T.
&&所有节点可以折叠
M.L_NODES.FORECOLOR=RGB(0,0,255)
&&设置所有节点的前景颜色
M.P_XMBH=XM_BH
=REQUERY('VIEW_XMLY')
M.L_LYCOUNT=RECCOUNT('VIEW_XMLY')
IF
M.L_LYCOUNT>0
FOR J=1 TO M.L_LYCOUNT
SELECT VIEW_XMLY
GO
J
if
!delete()
&&向'项目'父节点加入子节点'楼宇'KEY=LY,TEXT=楼宇实际编号
THIS.NODES.ADD('XM'+SF_XMXX.XM_BH,4,'LY'+VIEW_XMLY.LY_BH,VIEW_XMLY.LY_SJBH)
M.P_LYBH=VIEW_XMLY.LY_BH
=REQUERY('VIEW_XMDY')
M.L_DYCOUNT=RECCOUNT('VIEW_XMDY')
IF
M.L_DYCOUNT>0
FOR K=1 TO M.L_DYCOUNT
SELECT VIEW_XMDY
GO
K
if !delete()
&&向'楼宇'父节点加入子节点'单元'KEY=DY,TEXT=单元实际编号
THIS.NODES.ADD('LY'+VIEW_XMLY.LY_BH,4,'DY'+VIEW_XMDY.DY_BH,ALLTRIM(STR(VIEW_XMDY.DY_SJBH))+'单元')
M.P_DYBH=VIEW_XMDY.DY_BH
=REQUERY('VIEW_XMLC')
M.L_LCCOUNT=RECCOUNT('VIEW_XMLC')
IF
M.L_LCCOUNT>0
FOR L=1 TO M.L_LCCOUNT
SELECT VIEW_XMLC
GO
L
if !delete()
&&向'单元'父节点加入子节点'楼层'KEY=LC,TEXT=楼层实际编号
THIS.NODES.ADD('DY'+VIEW_XMDY.DY_BH,4,'LC'+VIEW_XMLC.LC_BH,ALLTRIM(STR(VIEW_XMLC.LC_SJCH))+'层')
endif
ENDFOR
ENDIF
endif
ENDFOR
ENDIF
endif
ENDFOR
ENDIF
endif
ENDFOR
源程序2如下:
*** ActiveX 控件事件 ***
LPARAMETERS node
*** ActiveX Contro1l Event
***
LOCAL
M.L_NODES,M.L_SELECTED,L_INDEX
M.L_SELECTED=THISform.Olecontrol1.SELECTEDITEM.INDEX
M.L_NODES=THISFORM.OLECONTROL1.NODES(M.L_SELECTED)
THISFORM.PAGEFRAME1.PAGE1.CAPTION='项目信息'
THISFORM.PAGEFRAME1.PAGE2.CAPTION='楼宇信息'
THISFORM.PAGEFRAME1.PAGE3.ENABLED=.F.
THISFORM.PAGEFRAME1.PAGE3.CAPTION='单元信息'
THISFORM.PAGEFRAME1.PAGE4.ENABLED=.F.
THISFORM.PAGEFRAME1.PAGE4.CAPTION='楼层信息'
DO
CASE
CASE
M.L_NODES.KEY='XM'
THISFORM.PAGEFRAME1.ACTIVEPAGE=1
CASE
M.L_NODES.KEY='LY'
THISFORM.PAGEFRAME1.ACTIVEPAGE=2
CASE
M.L_NODES.KEY='DY'
THISFORM.PAGEFRAME1.PAGE3.ENABLED=.T.
THISFORM.PAGEFRAME1.ACTIVEPAGE=3
CASE
M.L_NODES.KEY='LC'
THISFORM.PAGEFRAME1.PAGE4.ENABLED=.T.
THISFORM.PAGEFRAME1.ACTIVEPAGE=4
ENDCASE
if
M.L_NODES.KEY<>'XM'
DO CASE
CASE
M.L_NODES.KEY='LY'
M.P_XMBH=substr(M.L_NODES.KEY,3,2)
M.P_LYBH=RIGHT(M.L_NODES.KEY,LEN(M.L_NODES.KEY)-2)
=REQUERY('VIEW_XMDY')
IF
RECCOUNT('VIEW_XMDY')=0
SELE SF_LYXX
SET ORDER TO LYBH
SEEK
M.P_LYBH
IF FOUND()
DYZS=SF_LYXX.LY_DYZS
ENDIF
FOR I=1 TO
DYZS
SELECT VIEW_XMDY
APPEND
BLANK
THISFORM.PAGEFRAME1.PAGE3.GRID1.afterROWCOLCHANGE
ENDFOR
GO
TOP
THISFORM.PAGEFRAME1.PAGE3.GRID1.refresh
ENDIF
THISFORM.PAGEFRAME1.PAGE2.CAPTION=ALLTRIM(M.L_NODES.TEXT)
THISFORM.PAGEFRAME1.PAGE3.ENABLED=.T.
THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(LEFT(this.nodes(M.L_SELECTED).FULLPATH,AT('\',this.nodes(M.L_SELECTED).FULLPATH)))
=REQUERY('VIEW_XMLY')
sele
view_xmly
CASE
M.L_NODES.KEY='DY'
M.P_XMBH=substr(M.L_NODES.KEY,3,2)
M.P_lyBH=substr(M.L_NODES.KEY,3,4)
M.P_DYBH=RIGHT(M.L_NODES.KEY,LEN(M.L_NODES.KEY)-2)
=REQUERY('VIEW_XMLC')
IF
RECCOUNT('VIEW_XMLC')=0
SELE SF_DYXX
SET ORDER TO DYBH
SEEK
M.P_DYBH
IF FOUND()
LCZS=SF_DYXX.DY_LCS
ENDIF
FOR I=1 TO
LCZS
SELECT VIEW_XMLC
APPEND
BLANK
THISFORM.PAGEFRAME1.PAGE4.GRID1.afterROWCOLCHANGE
ENDFOR
GO
TOP
ENDIF
THISFORM.PAGEFRAME1.PAGE3.CAPTION=ALLTRIM(M.L_NODES.TEXT)
THISFORM.PAGEFRAME1.PAGE4.ENABLED=.T.
THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(LEFT(this.nodes(M.L_SELECTED).FULLPATH,AT('\',this.nodes(M.L_SELECTED).FULLPATH)))
=REQUERY('VIEW_XMdy')
sele
view_xmdy
CASE
M.L_NODES.KEY='LC'
M.P_XMBH=substr(M.L_NODES.KEY,3,2)
M.P_lyBH=substr(M.L_NODES.KEY,3,4)
M.P_dyBH=substr(M.L_NODES.KEY,3,6)
M.P_LCBH=RIGHT(M.L_NODES.KEY,LEN(M.L_NODES.KEY)-2)
THISFORM.PAGEFRAME1.PAGE4.CAPTION=ALLTRIM(M.L_NODES.TEXT)
THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(LEFT(this.nodes(M.L_SELECTED).FULLPATH,AT('\',this.nodes(M.L_SELECTED).FULLPATH)))
=REQUERY('VIEW_XMlc')
sele
view_xmlc
ENDCASE
ELSE
THISFORM.PAGEFRAME1.PAGE1.CAPTION=ALLTRIM(this.nodes(M.L_SELECTED).TEXT)
L_INDEX=M.L_SELECTED
M.P_XMBH=RIGHT(this.NODES(M.L_SELECTED).KEY,LEN(this.NODES(M.L_SELECTED).KEY)-2)
=REQUERY('VIEW_XMLY')
IF
RECCOUNT('VIEW_XMLY')=0
SELE SF_XMXX
SET ORDER TO XMBH
SEEK
M.P_XMBH
IF FOUND()
ZLS=SF_XMXX.XM_ZLS
ENDIF
FOR I=1 TO
ZLS
SELECT VIEW_XMLY
APPEND
BLANK
THISFORM.PAGEFRAME1.PAGE2.GRID1.AFTERROWCOLCHANGE
ENDFOR
GO
TOP
ENDIF
ENDIF
THISFORM.REFRESH
以上程序已经测试通过。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号