treeview的问题,请各位高手不吝赐教(50分)

  • 主题发起人 主题发起人 muxj
  • 开始时间 开始时间
M

muxj

Unregistered / Unconfirmed
GUEST, unregistred user!
treeview中有一个根结点和若干个子结点,我选中了一个子结点,然后做一些其它工作,然后
刷新treeview(其中加入了子结点),刷新后根结点被选中,但我想让先前我选中的那个子结点
被选中,就象table1中的bookmark一样,请问怎样才能实现,最好用给出代码,谢谢!谢谢!
 
function TForm1.GetTVIndex: Integer;
var
I: Integer;
begin
for I := 0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Items.Item.Selected then
begin
Result := I;//这里的I就是你所要的Index
Break;
end;
 
to jomee
他在中间加入了其他子节点后,你所获得的Index可能已经不是后来的所需的
Ixdex了,你的方法好象不是很保险。
我认为应该先记录下所选择的子节点的相关标识信息(text、Data或者是其他)
,待树刷新后对树进行遍历,查找到原先选择的节点,再把节点变成选择状态。
 
其实我已经把以前选中的子结点(node.text)保存到一个变量str里了,现在的问题是如何
在treeview里搜索str这个子结点。上述两们朋友的答案我还是有些不明白。
 
例子如下:
var
OldSel:TTreeNode;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TreeView1.Items do
begin
AddChild(nil,'1');
AddChild(nil,'2');
AddChild(nil,'3');
end;
end;

//选中一个节点,再执行
procedure TForm1.Button2Click(Sender: TObject);
begin
OldSel:=TreeView1.Selected;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
TreeView1.Items.AddFirst(nil,'0');
end;
//显示原来的节点
procedure TForm1.Button4Click(Sender: TObject);
begin
TreeView1.Selected:=OldSel;//关键语句
TreeView1.SetFocus;
end;
 
procedure find(str:string);//str为你所存储的原节点的text
var
i:integer;
begin
for i := 0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Items.Item.text=str then
begin
treeview1.selected:=TreeView1.Items.Item
TreeView1.SetFocus;
Break;
end;
end;
end.
 
支持milan!
遍历树进行搜索,算法多多!
 
定义一个 TTreeNodes 的对象变量 thisNode(事实上是个指针)指向你当前的结点,做完别的工作
后(只要你没有删除这个结点就行了),来个 TreeView1.Selected:= thisNode;
 
问个问题:
怎样实现:利用TreeView1的Data值进行定位?
 
后退
顶部