窗体上放一个MAINMENU1,一个TREEVIEW1,TREEVIEW1里的内容随意添加 用如下代码 procedure TForm1.Button1Click(Sender: TObject); var i:integer; level:integer; treenode:ttreenode; menuitem:tmenuitem; procedure addmenu(var item:ttreenode;var menuitems:tmenuitem;level:integer); var i:integer; treenode:ttreenode; menuitem:tmenuitem; begin for i:=0 to item.Count-1 do if item.Item[i].Level=level then begin treenode:=item.Item[i]; menuitem:=tmenuitem.Create(self); menuitem.Caption:=treenode.Text; menuitems.Add(menuitem); if treenode.HasChildren then addmenu(treenode,menuitem,level+1); end; end; begin level:=0; for i:=0 to treeview1.items.Count-1 do if treeview1.Items[i].Level=level then begin treenode:=treeview1.Items[i]; menuitem:=tmenuitem.Create(self); menuitem.Caption:=treenode.Text; mainmenu1.items.Add(menuitem); if treenode.HasChildren then addmenu(treenode,menuitem,level+1); end; end; 其中用到了递归,办法比较笨,如有更好的办法请告知,谢谢 一点愚见d6+win2000测试通过
用如下代码
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
level:integer;
treenode:ttreenode;
menuitem:tmenuitem;
procedure addmenu(var item:ttreenode;var menuitems:tmenuitem;level:integer);
var
i:integer;
treenode:ttreenode;
menuitem:tmenuitem;
begin
for i:=0 to item.Count-1 do
if item.Item[i].Level=level then
begin
treenode:=item.Item[i];
menuitem:=tmenuitem.Create(self);
menuitem.Caption:=treenode.Text; menuitems.Add(menuitem);
if treenode.HasChildren then
addmenu(treenode,menuitem,level+1);
end;
end;
begin
level:=0;
for i:=0 to treeview1.items.Count-1 do
if treeview1.Items[i].Level=level then
begin
treenode:=treeview1.Items[i];
menuitem:=tmenuitem.Create(self);
menuitem.Caption:=treenode.Text; mainmenu1.items.Add(menuitem);
if treenode.HasChildren then
addmenu(treenode,menuitem,level+1);
end;
end;
其中用到了递归,办法比较笨,如有更好的办法请告知,谢谢
一点愚见d6+win2000测试通过
{
AddSubMenu(NULL,TreeView1->Items->Item[0]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AddSubMenu(TMenuItem * ParentMenu,TTreeNode * ParentNode)
{
for (int i=0;i<ParentNode->Count;i++)
{
TMenuItem * TmpMenu=new TMenuItem(NULL);
if (ParentMenu==NULL){
aaa1->Add(TmpMenu); //aaa1是一个已存在的Menu名称
}
else
{
ParentMenu->Add(TmpMenu);
}
TmpMenu->Caption=ParentNode->Item[i]->Text;
AddSubMenu(TmpMenu,ParentNode->Item[i]); //递归一下
}
}
没用过BCB
但我看你程序有点问题要请教1。你从0---》COUNT???而不是COUNT-1?这里好奇怪?2。你将所有的items都加入,也就是说不是同一层的ITEMS你也加入进去了?
望指教
这种方法在处理很多节点时,速度怎样?
thanks
你的第一个问题在BCB中就应该这么写
第二个问题你猜对了,因为treeview是树形结构,而菜单也可以用子菜单来表示它,所以Treeview中的树是什么样,菜单就是什么样!