关于网友提出的“ 如何将菜单项与treeview相映射一一对应?高分求救分不够再加”问题疑问,本网通过在网上对“ 如何将菜单项与treeview相映射一一对应?高分求救分不够再加”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 如何将菜单项与treeview相映射一一对应?高分求救分不够再加
描述: 即从菜单得到treeview内容,且内容与菜单项对应?
从treeview又如何得到菜单项?
注意都是动态生成.
要具有通用性及递归性.
解决方案1: 自己解决了,请版主帮着结题
treeview to菜单
procedure TForm2.Button2Click(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;
mainmenu12.items.Add(menuitem);
if treenode.HasChildren then
addmenu(treenode,menuitem,level+1);
end;
end;
菜单to Treeview
procedure TForm2.AddAMenuItem(AMenuItem: TMenuItem;aNode:TTreeNode);
var
i,j,k:Integer;
s:String;
curNode:TTreeNode;
begin
curNode := nil;
s:=AMenuItem.Caption; //取菜单项的标题
if s<>'' then
begin
//k:=Pos('&',s);
// if k > 0 then
// Delete(s,k,1); //删除菜单项标题中的“&”符
//if s <> '-' then //如果是菜单分隔符“-”就不处理
curNode := TreeView1.Items.AddChild(aNode,s);
end;
J:=AMenuItem.Count;
if J > 0 then //有子菜单,就遍历
for i := 0 to j - 1 do
begin
AddAMenuItem(AMenuItem.Items[i],curNode);
end;
end;
解决方案2: procedure TForm1.AddChildMenuItem(Item:TMenuItem;Node:TTreeNode);
var
i:integer;
Item2:TMenuItem;
begin
for i:=0 to Node.Count-1 do
begin
Item2:=TMenuItem.Create(Owner);
Item2.Caption:=Node.Item[i].Text;
Item.Add(Item2);
AddChildMenuItem(ITem2,Node.Item[i]);
end;
end;
procedure TForm1.AddChildTreeNode(Node:TTreeNode;Item:TMenuItem);
var
i:integer;
Node2:TTreeNode;
begin
for i:=0 to Item.Count-1 do
begin
Node2:=TreeView1.Items.AddChild(Node,Item.Items[i].Caption);
AddChildTreeNode(Node2,Item.Items[i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);///////将MainMenu的项建立树。
begin
AddChildTreeNode(nil,MainMenu1.Items);
end;
procedure TForm1.Button2Click(Sender: TObject);//将树的内容建立到PopUpMenu中.
var
i:integer;
Item:TMenuItem;
begin
for i:=0 to TreeView1.Items.Count-1 do
if TreeView1.Items[i].Level=0 then
begin
Item:=TMenuItem.Create(Owner);
Item.Caption:=TreeView1.Items[i].Text;
PopUpMenu.Items.Add(Item);
AddChildMenuItem(Item,TreeView1.Items[i]);
end;
end;
以上介绍了“ 如何将菜单项与treeview相映射一一对应?高分求救分不够再加”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2480445.html