读书人

请问一个关于treeview定位的有关问题

发布时间: 2012-04-14 17:14:21 作者: rapoo

请教一个关于treeview定位的问题
我的程序里treeview结构是通过数据库生成的,所以添加修改删除移动都是通过数据库来实现的,但是有一个问题一直比较困扰,每次数据库更新后重构treeview时,节点的焦点就会复位到root,如何让焦点保留在刷新前的位置?

我试过find的方式定位,有些操作可以达到效果,有些操作不起左右。

每当重构Treeview后执行FindNode,表现不稳定。
TreeRedraw tvCodeItems.hwnd, True
FindNode CurNode.Key, CurNode.Parent.Key



Private Sub FindNode(ByVal sKey As String, ByVal sParentKey As String)
On Error Resume Next
Dim i As Integer
Dim bFind As Boolean
For i = 1 To tvCodeItems.Nodes.count
MsgBox tvCodeItems.Nodes(i).Key & ":" & sKey
If Left(Replace(tvCodeItems.Nodes(i).Key, "C", ""), 11) = Left(Replace(sKey, "C", ""), 11) Then
tvCodeItems.Nodes(i).Selected = True
bFind = True
Exit Sub
End If
Next
If Not bFind Then
For i = 1 To tvCodeItems.Nodes.count
MsgBox tvCodeItems.Nodes(i).Key & ":" & sParentKey
If tvCodeItems.Nodes(i).Key = sParentKey Then
tvCodeItems.Nodes(i).Selected = True
Exit Sub
End If
Next
End If
End Sub


请高人指点迷津,谢谢!

[解决办法]
你只可知道KEY,就可以直接定位。

tvCodeItems.Nodes(key).Selected = True
tvCodeItems.Nodes(key).E什方法
[解决办法]

VB code
tvCodeItems.Nodes(key).Selected = TruetvCodeItems.Nodes(key).EnsureVisible
[解决办法]
数据库的记录的Key值用作Nodes的Key值(如果数据库Key值为数值类型,加入一个特定字符转换字串)

更新前,记住当前节点的key值
sPrevKey=tvCodeItems.SelectedItem.Key

刷新操作

’刷新后
tvCodeItems.Nodes(sPrevkey).Selected = True
tvCodeItems.Nodes(sPrevkey).EnsureVisible
tvCodeItems.setcocus

读书人网 >VB

热点推荐