+ -
当前位置:首页 → 问答吧 → TreeView问题

TreeView问题

时间:2011-08-14

来源:互联网

有两个问题:
一、在treeview创建树,可复选的,有个定位(搜索)功能,怎么把某一个或多个节点高亮呢?

二、treeview初始会默认选中第一个节点,我用在mousedown事件中,判断节点是否被选中,若是改变stateIndex,但是点击每次点击第一个节点的+ (展开第一个节点)时stateIndex都会改变,因为是默认被选中的,我是希望点展开的时候不会触发stateIndex改变,就是说不让初始默认就选中第一个节点或者提供其他的实现方法。

等待中...

作者: tianc001   发布时间: 2011-08-14

整个程序的源代码如下:


   unit main;

   interface

   uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, FileCtrl, ComCtrls, ImgList;

   type

   TForm1 = class(TForm)
   DirTreeView: TTreeView;
   FileListBox1: TFileListBox;
   DriveComboBox1: TDriveComboBox;
   ImageList1: TImageList;
   procedure FormCreate(Sender: TObject);
   procedure DirTreeViewExpanding(Sender: TObject; Node: TTreeNode;var AllowExpansion: Boolean);
   private
   { Private declarations }
   public
   { Public declarations }
   end;

   var
   Form1: TForm1;

   implementation
   {$R *.DFM}

   procedure TForm1.FormCreate(Sender: TObject);
   var
   FirstNode,DirNode : TTreeNode;
   ItemCount,Index:integer;
   Itemstr:string;
   begin
   ItemCount:= DriveComboBox1.Items.Count; //所有驱动器的个数
   FirstNode := DirTreeView.Items.GetFirstNode;
   for index := 0 to ItemCount -1 do
   begin
   ItemStr:= DriveComboBox1.Items[index];
   ItemStr:= copy(ItemStr,1,pos(:,ItemStr)) ; //获得驱动器的名称(比如C/D)
   DirNode := DirTreeView.Items.AddChild(FirstNode, ItemStr );
   DirNode.HasChildren := true;
  DirNode.ImageIndex := 0;
   DirNode.SelectedIndex := 1;
   end;
   end;

作者: sgzhou12345   发布时间: 2011-08-14

//响应扩展事件
   procedure TForm1.DirTreeViewExpanding(Sender: TObject; Node: TTreeNode;Var AllowExpansion: Boolean);
   var
   DirNode : TTreeNode;
   ItemCount,Index,level,icount:integer;
   Itemstr,strPath:string;
   begin
   if node.Count = 0 then
   begin
   icount:=0;
   level:=node.Level ;
   dirnode:=node;
   strPath:=node.Text+\ ;
   while level 0 do
   begin
   strPath:=dirnode.Parent.Text+\+strpath;
   dirnode:=dirnode.parent;
   level :=level -1;
   end;

   FileListBox1.Clear ;
   FileListBox1.Directory := strpath;
   ItemCount:= FileListBox1.Items.Count;

  for index:=0 to ItemCount -1 do
   begin
   itemstr:=filelistbox1.items[index];
   itemstr:= copy(ItemStr,2,pos(],ItemStr)-2) ;
   if (itemstr〈〉.) and (itemstr 〈〉 ..) then
   begin
   DirNode := DirTreeView.Items.AddChild(Node,itemstr );
   DirNode.HasChildren :=true;
   DirNode.ImageIndex := 0;
   DirNode.SelectedIndex := 1;
   icount:=icount+1;
   end;

   if icount = 0 then 
Node.HasChildren := false;
  end;
   end;
   end;
   end.

作者: sgzhou12345   发布时间: 2011-08-14

热门下载

更多