因为节点不多,我手动添加了个treeview,不是动态从库里调的,然而这样的treeview用法我却没用过,点击节点触发时,select属性不起作用啊
一年级
    一一班
    一二班
    一三班
二年级
    二一班
    二二班
    三二班
三年级
    三一班
    三二班
    三三班我把一一班,一二班,一三班到三三班的selected index分别设为0.1.2.3...9,现在要这样,左边是这个treeview,右边是一个pagecontrol,我想点哪个子节点就显示那个TabSheet在程序里用的时候点击第一个分类中(一年级)的3个节点,很正常,显示是TabSheet是对的,
但是点第二个和第三个分类时,比如二一班,显示的还是一一班的TabSheet,二二班,显示的也是一二班的TabSheet,不知道是怎么回事,
换句话说就是点第二个分类里的子节点,显示的是第一个分类里子节点的东西,请大家看一下我的代码错在哪里procedure TFormMain.TreeView1Change(Sender: TObject; Node: TTreeNode);
var i:integer;
begin
    if not (TTreeView(Sender).Selected = NIL) then
    begin
      if TTreeView(Sender).Selected.HasChildren then
        begin
         //
        end
      else
        begin
          if not (TTreeView(Sender).Selected.Parent=NIL) then
            if TTreeview(Sender).Selected.Index=0 then
                for i:=0 to ComponentCount-1 do
                  begin
                    if components[i] is TTabSheet then
                       TTabSheet(Components[I]).TabVisible:=false;  //隐藏其它的TabSheet,只显示TabSheet1
                       self.TabSheet1.TabVisible:=true;
                  end;            if TTreeview(Sender).Selected.Index=1 then
                for i:=0 to ComponentCount-1 do
                  begin
                    if components[i] is TTabSheet then
                       TTabSheet(Components[I]).TabVisible:=false;  //隐藏其它的TabSheet,只显示TabSheet2
                       self.TabSheet2.TabVisible:=true;
                  end;            if TTreeview(Sender).Selected.Index=2 then
                for i:=0 to ComponentCount-1 do
                  begin
                    if components[i] is TTabSheet then
                       TTabSheet(Components[I]).TabVisible:=false;
                       self.TabSheet3.TabVisible:=true;
                  end;........................
            if TTreeview(Sender).Selected.Index=8 then
                for i:=0 to ComponentCount-1 do
                  begin
                    if components[i] is TTabSheet then
                       TTabSheet(Components[I]).TabVisible:=false;
                       self.TabSheet9.TabVisible:=true;
                  end;  end;
end;
end;

解决方案 »

  1.   

    TTreeview(Sender).Selected.Index是针对某个根节点的对应节点的Index,不同根节点的第一个字节点的index是相同的。不是你定义的那个。你要得到你定义的SelectedIndex应该是
    TTreeview(Sender).Selected.SelectedIndex这样就可以得到你定义的那个值了。
      

  2.   

    楼主你的selectedindex属性理解错了,SelectedIndex属性的意思是选中某个节点后这个节点的图片索引值
      

  3.   

    哦,明白你的意思了,把TabSheet名字的索引号放在SelectedIndex属性里了,然后用这个SelectedIndex属性关联TabSheet的索引号
    给你写了一个简单的例子,把你的
    一一班,一二班,一三班,二一班,二二班,二三班,三一班,三二班,三三班的SelectedIndex的值依次写为0,1,2,3,4,5,6,7,8
    把PageControl中的TabSheet名字依次改为TabSheet0,TabSheet1,TabSheet2,TabSheet3,TabSheet4,TabSheet5,TabSheet6,TabSheet7,TabSheet8
    然后按照下面的代码写就可以了unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ImgList;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        PageControl1: TPageControl;
        TabSheet0: TTabSheet;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        TabSheet4: TTabSheet;
        TabSheet5: TTabSheet;
        TabSheet6: TTabSheet;
        TabSheet7: TTabSheet;
        TabSheet8: TTabSheet;
        procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Assigned(FindComponent('TabSheet'+IntToStr(TreeView1.Selected.SelectedIndex))) then
         PageControl1.ActivePage:=TTabSheet(FindComponent('TabSheet'+IntToStr(TreeView1.Selected.SelectedIndex)));
    end;end.
      

  4.   

    procedure TFormMain.TreeView1Change(Sender: TObject; Node: TTreeNode); 
    直接用这里的参数Node来处理,如:
    if Node.Index= 0 then
      ...
      

  5.   

    看了大家说的,是不是把TreeView1.Selected.Index换成TreeView1.Selected.SelectedIndex就可以了,我试试