我根据数据库表建立了2个TreeView为TreeView1,TreeView2。两个TreeView仅仅节点数量不同,但是相同位置节点(如果存在)则其data必定相同,我想点击TreeView1中某一个节点来影响TreeView2中有相同data的节点。
目前我的做法是遍历TreeView2所有节点查找与TreeView1.selected中data相同的节点来对TreeView2的该节点进行控制,请问有更加巧妙的办法实现我的需求吗?
目前我的做法是遍历TreeView2所有节点查找与TreeView1.selected中data相同的节点来对TreeView2的该节点进行控制,请问有更加巧妙的办法实现我的需求吗?
解决方案 »
- delphi 入门级求助,动态创建控件问题
- 请教,DBGrid的表外表样式问题?
- 请问怎么获取OpenDialog所打开文件的后缀名?
- 现在才开始学delphi,会不会太迟 了?
- 怎样把后缀名为.DLL的显示在listview组件内?100分
- 有关TClientDataSet的菜鸟问题
- 变量类型转换的问题
- 请问各位:我做了两个数据库连接,可是总是报错,多谢指教。
- 以前UDP不怎么丢包,突然好像之间丢包比较严重了
- 又发布delphi安装程序的简单方法吗?我的installshield是limited版,所以制作安装程序很麻烦,大家是怎么制作安装程序的?
- WaitForSingleObject 问题
- 静音
这样你就可以访问1节点时直接通过data属性来访问2对应的节点了。
虽然不是同时,但是在2中确实存在与1node.data相同的2node.data。请问如何‘访问1节点时直接通过data属性来访问2对应的节点’,我只想得到遍历方法。
XXXXXX =record
......
Node1 : TTreeNode;
Node2 : TTreeNode;
......
end;分别用来存放TreeView1和TreeView2中对应的结点。这样就可以在TreeView1中快速访问到对应的TreeView2中的结点了。当然,程序需要作出比原来更多的判断,来正确处理结点删除时的操作。
如果数据库表记录的索引不变(记录的顺序不变),你就新建列表,比如果stringlist
然后,stringlist.addobjects('数据库记录的索引号Index', TreeView1的节点),这样建立一个treeview1的节点和数据库索引的对应关系,然后在建treeview2时,你可以根据数据库记录索引的id取出对应treeview1的节点node1,把node1.data指向node2.data就行了
~~
如果数据库记录的索引变了(记录顺序改变),你就可以用记录的关键一类的取代索引,只要记录的关键字不变就行不知道我理解的对不对~~
几天没来,感谢大家的帮忙。
jadeluo 和iuIRCClient 的解决思路相近,让我又学会了不少,我考虑了下采用了记录类型来存放,可是我又遇到了新问题:
两人都说需要在treeview1的节点存放treeview2.node。在需要时调出内容就可以了。确实如此。可是,我的treeview1和treeview2是同时开始创建的,如何在treeview1某个节点创建时存入treeview2对应此treeview1节点的treeview2的节点?虽然他们的节点序号一样:
对应关系如:treeview2.Items.Item[0] 对应 treeview1.Items.Item[0]
treeview2.Items.Item[0].Item[3] 对应 treeview1.Items.Item[0].Item[3]
比如:
tnode1创建
tnode2创建
tnode2.data=tnode1
tnode1.data=tnode2
XXXX = record
...
DataIndex ;// 数据库记录的关键字或索引
Node1; // 对应treeview1的节点
Node2; // 对应treeview2的节点
...
end;
创建第一个树的时候,同时创建record,存放到列表里TStringList.AddObject(DataIndex, Node1);这样创建第二个树时,查找到dataindex对应的列表中的序号index取出node1,在根据node1取出对应的record,把node2也写进去
我的tnode1与tnode2分别放在两个线程中执行,这样算不算同时进行?如果采用logne() 的做法,不会出什么意外么?
你建node的时候,就把index放入他们的tag或者data吧。然后你只能自已写个循环根据这个值来扁历定位了。