用treeview做一个象www.csdn.net中BBS左边的菜单栏一样的界面,我的思路对不对,请高手指点!!
首先生成根结点
然后生成各子结点,再给各个子结点生成子结点,并且收缩,当点击时判断是不是点击根结点,如何不是,再判断是不是点击子结点,如果是,先显示‘请稍等’字样,后台取得该结点的值,然后从数据库查询数据,得到后生成各个子结点。

解决方案 »

  1.   

    对,这个只给你生成的代码,你看看function TForm5.LoadCode(crTbl:Ttable):Integer;   var NowID,ShowTxt:String;//NOWID 编码,ShowTxt 名称       Level:Integer;//level保存结点级数       MyNode:array[0..2]of TTreeNode;//保存各级节点,最长支持3级(重点)    begin    Screen.Cursor:=crHourGlass;//设置光标    Level:=0;//初始为最顶点    With crTbl do    begin     //try     if not Active then Open;    First;     tveCode.Items.Clear;     //以下是增加第一项    MyNode[Level]:=tveCode.Items.Add(tveCode.TopItem,SFirstNodeTxt);    MyNode[Level].ImageIndex:=0; //设置显示图片    MyNode[Level].SelectedIndex:=1;     //以上是增加第一项    While Not Eof do     begin    NowID:=Trim(FieldByName('aCode').AsString);//保存编码    ShowTxt:=NowID+' '+FieldByName('aName').AsString;//名称    Level:=GetLevel(SCodeFormat,NowID); //返回代码的级数     //以下是增加子项     //以下用上一级节点为父节点添加子节点     if Level>0 then//确保代码符合标准     begin    MyNode[Level]:=tveCode.Items.AddChild(MyNode[Level-1],ShowTxt);    MyNode[Level].ImageIndex:=1;    MyNode[Level].SelectedIndex:=2;    end;     //以上是增加子项    Next;    end;   // finally    //Close;   // end;    end;    MyNode[0].Expand(False);//将首节点展开    Screen.Cursor:=crDefault;    end;    //以上函数将Code.db表中的科目代码和科目代码名称显示出来    //下面函数的功能是返回一代码的级数,参数sFormat传递科目代//码结构;    //参数sCode传递某一科目代码    function TForm5.GetLevel(sFormat,sCode:String):Integer;    var i,Level,iLen:Integer;    begin    Level:=-1;//如果代码不符合标准,则返回-1    iLen:=0;    if (sFormat<>'')and(sCode<>'')then     for i:=1 to Length(sFormat) do     begin     iLen:=iLen+StrToInt(sFormat[i]);     if Length(sCode)=iLen then     begin    Level:=i;    Break;     end;     end;    Result:=Level;    end;    //上面函数的功能是返回一代码的级数调用LoadCode(tblCode);
    tblCode是一个TABLE控件