会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > ActiveX控件图表 > 正文

Access中使用TreeView 树形控件 详细讲解(Excel Word Office都可

时间:2013-10-01 21:12 来源:未知 作者:admin 阅读:
TreeView详解(转载)
TreeView 控件响应一些我们觉的VFP 控件的方法和事件: Click, DblClick, Drag, DragDrop, DragOver, GotFocus, KeyDown, KeyPress, KeyUp, LostFocus, MouseDown, MouseMove, MouseUp, Move, Refresh, SetFocus, ShowWhatsThis, 和 ZOrder。 有一个很大的例外: 没有 RightClick 事件。在稍后,你会看到如何处理这种情况。 
除这些方法和事件外,TreeView 控件有一些它自己的方法和事件(帮助文件中列出的 Clear 和 Remove 方法, 实际上是属性节点集合而不是 TreeView 控件自己的): 
BeforeLabelEdit 和 AfterLabelEdit 发生在标签被用户修改前和修改后(就象在 Windows 的资源管理器中, 你可以单击选定的节点并修改它的文本(在稍后你可以看到如何废止该自动编辑功能)。 该事件中的代码通常用于在某处保存新的文本, 如一个表中的字段。 
Collapse 和 Expand 当用户收缩或扩展一个节点时激发。 它们接受的参数是选定节点的对象。 收缩或扩展一个节点不会使该节点成为活动的节点, 这一点通常会使用户糊涂。 添加以下代码到 Collapse 和 Expand 事件来确保存该节点成为活动的节点(调用了我将在稍解释的 NodeClick(), 它们只在你在这些方法中有一些自定义代码是才是必须的): 
lparameters node
Node.Selected = .T.
This.NodeClick(Node)
GetVisibleCount 显示控件中全部可见的节点数。 如果控件可以显示最后的节点,该数可能看起来会很小。 
HitTest :如果传递的 X 和 Y 座标上存在节点,它返回一个节点对象引用,否则返回 .NULL. 这里有一个新的问题: HitTest 期待 X 和 Y 座标值是缇(twips) (用于 Visual Basic), 但 VFP 使用象素。 以下代码将转换象素值到缇。TREEVIEW 示例表单的 INIT 中有这些代码, 并有两个自定义属性来保存计算值: nTreeFactorX 和 nTreeFactorY。 
local liHWnd, ;
liHDC, ;
liPixelsPerInchX, ;
liPixelsPerInchY 
* 定义一些常数。 
#define cnLOG_PIXELS_X      88
* 来自 WINGDI.H
#define cnLOG_PIXELS_Y      90
* 来自From WINGDI.H
#define cnTWIPS_PER_INCH  1440
* 每英寸1440 缇 
* 定义一些 Windows API 函数 
declare integer GetActiveWindow in WIN32API
declare integer GetDC           in WIN32API ;
integer iHDC
declare integer GetDeviceCaps   in WIN32API ;
integer iHDC, integer iIndex 
* 为 VFP 取得图形设备(device context)。 
liHWnd = GetActiveWindow()
liHDC  = GetDC(liHWnd) 
* 取得每英寸象素值。 
liPixelsPerInchX = GetDeviceCaps(liHDC, cnLOG_PIXELS_X)
liPixelsPerInchY = GetDeviceCaps(liHDC, cnLOG_PIXELS_Y) 
* 取得每象素缇并保存到表单属性中。 
with This
.nTreeFactorX = cnTWIPS_PER_INCH/liPixelsPerInchX
.nTreeFactorY = cnTWIPS_PER_INCH/liPixelsPerInchY
endwith
HitTest() 有助于解决一个处理鼠标右击事件。 你可能想在用户在节点上右击时显示弹式菜单, 但在节点上右击时不会使它成为选定节点。 在控件的 MouseDown 事件中用以下代码来处理这一点(因为没有 RightClick 事件,所以这是你能处理右击的唯一办法)。 同时, 调用 NodeClick() 仅当你在该方法中放有代码时才是必须的: 
lparameters Button, Shift, X, Y
local loNode
if Button = 2 
* 如果这是右鼠标键, 取得鼠标下的节点的引用。 
loNode = This.HitTest(X * Thisform.nTreeFactorX, ;
  Y * Thisform.nTreeFactorX) 
* 如果有可用的节点, 选择它。 
if not isnull(loNode)
  loNode.Selected = .T.
  This.NodeClick(loNode)
endif not isnull(loNode)
* 现在显示右击快捷菜单
else
* 处理必要的鼠标左击
endif Button = 2
NodeClick: 当用户在节点上单击时激活 (在 Click 事件之前)。 NodeClick 接受一个选定节点的对象引用作为参数。 该方法被典型地用于在一个节点被选定时更新一些东西(例如其它控件的值)。 如果 NodeClick 中的代码执行时花的时间太长, 选定项会被高亮显示但以前的项会被断续线包围。 移动鼠标(即使没有单击鼠标按钮) 会恢复以前项的高亮显示。 要避免这一问题, 可以在 NodeClick 事件中放入以下代码来保证节点被单击而成为选定项: 
Node.Selected = .T.
StartLabelEdit: 通常被用于编辑节点的标签。 它用于 LabelEdit 属性被设置为1-手动时。 
TreeView 控件节点集合方法
以下是TreeView 控件的节点集合的方法(被指定的 <Object>.Nodes 引用, 其中 <Object> 是 TreeView 控件名): 
Add: 添加一个新节点并返回它的引用。 它使用以下语法 
<Object>.Nodes.Add(Relative, Relationship, Key, Text, Image, ;
  SelectedImage)
其中: 
Relative: 一个已存在节点的索引或键值。 如果未指定, 新节点放在顶级节点的末端。 
Relationship: 新节点放置的相对于第一个参数中指定的节点的位置,可以是以下值: 
1: 节点放在相对节点所在级的所有节点的末端。 
2: 节点放在相对节点的后面。 
3: 节点放在相对节点的前面。 
4: 节点成为相对节点的子节点。 
Key: 用于指明节点的唯一串。 如果显示内容是从一个表的记录中载入的, 可使用记录的主关键字段值 (如果不是字符型的,还需要转换为字符型)。 否则, 可使用一个转换为串的顺序号。 
Text: 控件节点中显示的文本。 
Image: 相关 ImageList 控件中的图象索引。 
SelectedImage: 当节点选定时,要显示的相关 ImageList 控件中的图象索引。 
Clear: 清除全部节点。 
Remove: 移去指定索引号的节点。 
TreeView 控件节点集合属性 
以下是节点集合属性: 
Count: 节点号。 
[<Index>]: 一个节点号的对象引用。
Treeview(续2)
TreeView 控件节点对象方法 
以下是节点对象方法: 
CreateDragImage: 该方法不能用于 VFP ,因为该方法返回一个图象时, DragIcon 需要一个 CUR 文件名。 
EnsureVisible: 确保指定节点是可见的。 该方法在必要时卷动 TreeView 控件并扩展所有指定节点的父节点。 
TreeView 控件节点对象属性 
以下是节点对象属性: 
Children: 如果节点对象拥有子节点,该值为.T.。 
Expanded: 如果节点对象已经扩展,该值为.T.。 
FullPath: 该节点的所有父节点(祖节点,曾祖节点等)的文本串接, 各节点的文本间用控件的 PathSeparator 属性中指定的分隔符分隔。它非常类似于带路么的文件名。 
Image, ExpandedImage 和 SelectedImage: 相关ImageList 控件中的适当的图象号。 
Index: 节点集合中的节点对象的索引。 
Key: 当节点添加时指定的唯一键值。 
Child, FirstSibling, LastSibling, Previous, Parent, Next 和 Root: 指向与指定节点相关的节点对象。 
Selected: 如果节点对象是选定的,该值为.T.。 设置该属性为 .T. 会自动高亮显示该节点并设置先前选定的节点的 Selected 属性为 .F. 
Text: 控件中显示的文本。 
TreeView 控件属性 
如同事件一样, TreeView 控件支持一些其它控件所拥有的属性, 包括 DragIcon, DragMode, Enabled 和 Visible。 许多 TreeView 特定属性可以在设计时在 TreeView 控件上单击鼠标右键调出的 TreeView 控件属性表中设置。 包括 Style, LineStyle, Indentation, PathSeparator 和 HideSelection。 
在属性表中可编辑的属性中, 你最需要改变其默认值的是: 
Style: 指明 TreeView 控件显示什么。 可以选择是否显示图像,线条, 加号/减号等。 
LineStyle: 指明显示根线。 如果没有设置该属性为 1-根线, 无论 Style 是如何设置的,顶级对象上都不会有加号/减号标记。 
LabelEdit: 如果你不想让用户修改各节点上的文本, 设置该属性为 1-手动。 
ImageList: 一个 ImageList 控件对象引用,它包括了控件中的节点使用的图象; 参见本文 ImageList 一章中关于该简单控件的说明。 不幸的是,该属性不能可视化地进行设置; 你必须以编程方式用代码进行设置,象下面一样在表单的 Init 方法中: 
This.oTree.ImageList = This.oImageList.Object
***********************以下代码为我Appler整理*********************
在表单上添加一个TreeView,把TreeView的 NAME 值修改为 TreeView1,
然后再在在表单中添加一个ImageList控件(Microsoft ImageList Control),
然后把这个ImageList控件的 NAME 值改为ImageList1
右击这个控件,在ImageListCtrl Properties中的Images中添加几个图片
最后在表单的INIT事件:
This.TreeView1.ImageList=This.ImageList1.Object
this.TreeView1.Nodes.Add(,,,"Node 1")
this.TreeView1.Nodes.Add(,,,"Node 2")
THIS.TreeView1.Nodes(1).IMAGE=1 &&这里1表示节点图片为Images控件中的第1个图片
THIS.TreeView1.Nodes(2).IMAGE=2 &&这里2表示节点图片为Images控件中的第2个图片
THIS.TreeView1.Nodes(3).IMAGE=3 &&这里1表示节点图片为Images控件中的第3个图片
THIS.TreeView1.Nodes(4).IMAGE=4 &&这里2表示节点图片为Images控件中的第4个图片

FOR I=1 TO THIS.TreeView1.GetVisibleCount &&取得的节点数最小为4
 THIS.TreeView1.Nodes(I).IMAGE=1
ENDFOR
******************************************************************
***********************以下代码为我Appler整理*********************
使TreeView控件不可用:
THISFORM.TreeView1.OBJECT.ENABLED=.F. &&即在Enabled属性前加OBJECT
******************************************************************
注意你需要在表单的 Init 事件中而不是 TreeView 的 Init 事件中进行上述设置, 因为 TreeView 可能会在 ImageList 之前实例化, 如果这样,试着设置 ImageList 属性为一个尚不存在的对象将会失败。 同时, 注意上述代码中的"object" 关键字; 这是必须的。 
Indentation: 子节点缩进多少。
HideSelection: 如果没有关闭这一选项, 当 TreeView 控件失去焦点时,选定节点不会保持高亮度。 这很容易把用户糊涂。 
Font: 用于节点文本的字体名字, 字号和字型。该属性可从属性表中修改(注意帮助文件中说明了 ScrollBars 属性, 但没有该属性)。 
DropHighlight: 该属性用于支持TreeView 控件的 DragOver 事件, 因此可以在鼠标经过一个节点时,高亮显示该节点。 但是, 这只会在 VFP 6 中的版本 6 的 TreeView 控件中才实现了; 在老版本的控件中设置该属性为节点对象时,会引发一条"类型失配" 错误。 在这种情况下, 要达到同样目的,可用 HitTest() 来检查鼠标经过的是哪一节点并设置该节点的 Selected 属性为 .T. TREEVIEW 示例表单在 DragOver 事件中使用了该技术。 

(责任编辑:admin)

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: