您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 如何将菜单项与treeview相映射一一对应?高分求救分不够再加

如何将菜单项与treeview相映射一一对应?高分求救分不够再加

来源:网络整理     时间:2016/7/10 9:53:05     关键词:

关于网友提出的“ 如何将菜单项与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

相关图片

相关文章