注册 登录
编程论坛 VFP论坛

TREE 目录树最简单的案例疑问

ljlhpop 发布于 2022-03-06 11:09, 3030 次点击
只有本站会员才能查看附件,请 登录

请各位大佬帮忙看下,如果要显示点击右边目录树的值,比如任何一个人,,右边的文本框就显示相应的数值,右下角的表格也自动定位到那一个人的记录,并用红色背景标注。。研究了一个月搞不懂,,请问这个咋搞?
只有本站会员才能查看附件,请 登录
15 回复
#2
laowan0012022-03-06 17:13
研究一下thisform.olecontrol1.nodeclick事件吧,只要获取到一二级的名称,到grid1里找到对应记录并定位
至于上面的文本框,可以在grid1的AfterRowColChange事件里写就行
#3
ljlhpop2022-03-06 20:38
回复 2楼 laowan001
多谢大师指点,我再研究研究
#4
sam_jiang2022-03-06 21:05
nodeclick事件里面来个set filter to where 姓名=?, 然后再来个refresh应该就可以搞定了。
#5
easyppt2022-03-07 08:58
node加载 通常都要使用  Key 和 Tag,NodeClick时,获取对应节点的 Key,而这个Key就是表记录的唯一值,然后到对应表中去找(定位记录).
右边的表格 和文本框 的数据源应该都是同一个表,表格的AfterRowColChange 写 thisform.refersh即可。

表格当前行高亮显示,可以设置表格的属性:HighlightStyle  和  HighlightForeColor

现在还有新手学习VFP,真的很少见了!

[此贴子已经被作者于2022-3-7 09:08编辑过]

#6
cjc10102022-03-07 10:28
tree的nodeclick事件里面写上下面程序行就可以了:
SELECT gzrs
LOCATE FOR ALLTRIM(gzrs.姓名)==ALLTRIM(Node.text)
IF FOUND()
thisform.text1.Value=gzrs.卡号
thisform.text2.Value=gzrs.姓名
thisform.text3.Value=gzrs.部门
thisform.text4.Value=gzrs.报到日期
thisform.text5.Value=gzrs.住址
ENDIF
thisform.grid1.Refresh
#7
ljlhpop2022-03-07 17:49
回复 5楼 easyppt
40岁大叔,学的是情怀,,,以前看别人用VFP写的软件,感觉很牛B,现在有点时间,就兴趣学学.嘿嘿
非常感谢指点!
#8
ljlhpop2022-03-07 18:06
回复 4楼 sam_jiang
感谢,后来用6楼的大师代码可以了
#9
ljlhpop2022-03-07 18:18
回复 6楼 cjc1010
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

大师好!
按您提供的代码,确实可以显示左右联动,,,不过就是点击左边边的值(人名),右边表不能自动高亮..要点击右边表里面的值,这行才能高亮显示.不知是为啥?
#10
ljlhpop2022-03-07 20:10
回复 6楼 cjc1010
*** ActiveX 控件事件 ***
LPARAMETERS node
XM=ALLTRIM(Node.text)
SELECT gzrs
LOCATE FOR ALLTRIM(gzrs.姓名)==ALLTRIM(Node.text)
IF FOUND()
    thisform.text1.Value=gzrs.卡号
    thisform.text2.Value=gzrs.姓名
    thisform.text3.Value=gzrs.部门
    thisform.text4.Value=gzrs.报到日期
    thisform.text5.Value=gzrs.住址
ENDIF



Thisform.grid1.SetAll('DynamicForeColor','IIF(姓名="&XM",RGb(255,0,0),rgb(0,0,0))','column')
Thisform.grid1.SetAll('DynamicbackColor','iif(姓名="&xm",RGb(255,255,0),rgb(255,255,255))','column')
Thisform.Grid1.Refresh

OK 啦,,,可以实现点击左边的树,右边变颜色
#11
kangss2022-03-08 14:03
以下是引用ljlhpop在2022-3-7 20:10:26的发言:

*** ActiveX 控件事件 ***
LPARAMETERS node
XM=ALLTRIM(Node.text)
SELECT gzrs
LOCATE FOR ALLTRIM(gzrs.姓名)==ALLTRIM(Node.text)
IF FOUND()
    thisform.text1.Value=gzrs.卡号
    thisform.text2.Value=gzrs.姓名
    thisform.text3.Value=gzrs.部门
    thisform.text4.Value=gzrs.报到日期
    thisform.text5.Value=gzrs.住址
ENDIF



Thisform.grid1.SetAll('DynamicForeColor','IIF(姓名="&XM",RGb(255,0,0),rgb(0,0,0))','column')
Thisform.grid1.SetAll('DynamicbackColor','iif(姓名="&xm",RGb(255,255,0),rgb(255,255,255))','column')
Thisform.Grid1.Refresh

OK 啦,,,可以实现点击左边的树,右边变颜色


“LOCATE FOR ALLTRIM(gzrs.姓名)==ALLTRIM(Node.text)”
卡号应该是唯一的,建议用卡号搜索。
遇到姓名重名会麻烦的。
#12
ljlhpop2022-03-08 17:56
回复 11楼 kangss
主要是姓名再左边的目录树里面,看的比较直白,,,总比卡号好吧,,,不过你说的重复的问题倒是没考虑到
#13
mhf88552022-03-10 21:01
学习了,谢谢分享
#14
kangss2022-03-13 19:07
以下是引用ljlhpop在2022-3-8 17:56:23的发言:

主要是姓名再左边的目录树里面,看的比较直白,,,总比卡号好吧,,,不过你说的重复的问题倒是没考虑到


你 tree 中的 Node.text 可以赋值姓名 + 卡号
********************************
针车
 ├─【包改君  】(00172)
********************************
LOCATE FOR ALLTRIM(gzrs.卡号) == ALLTRIM(STREXTRACT(Node.text, [(], [)]))
#15
htys2022-03-14 20:03
学习了
#16
ljlhpop2022-03-14 21:05
回复 14楼 kangss
非常感谢!
1