菜单和树的动作如何关联?
我想问一下,如何将mainmenu的动作关联到treeview中去,我的treeview内容是循环从mainnenu中取的。
[解决办法]
在树的双击事件中找到对应的菜单项然后调用那个菜单对应的事件不就行了!
[解决办法]
你是直接要代码吗? 其实实现起来是很简单的
其中MenuItem的Click事件关联到 TreeView的子节点时,采用指针关联即可
pas 文件
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Menus;type TForm1 = class(TForm) mm1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N11: TMenuItem; N21: TMenuItem; tv1: TTreeView; Button1: TButton; procedure Button1Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure N21Click(Sender: TObject); procedure tv1Change(Sender: TObject; Node: TTreeNode); private { Private declarations } public { Public declarations } procedure SetToTreeView(PMenuItem: TMenuItem;PNoteItem: TTreeNode); end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var i: Integer; titem, recItem: TTreeNode;begin tv1.Items.Clear; SetToTreeView(mm1.Items, tv1.TopItem);end;procedure TForm1.SetToTreeView(PMenuItem: TMenuItem;PNoteItem: TTreeNode);var i: Integer; titem, recItem: TTreeNode;begin for i:=0 to PMenuItem.Count-1 do begin titem := tv1.Items.AddChild(PNoteItem, PMenuItem.Items[i].Caption); titem.Data := Self.MethodAddress(PMenuItem.Items[i].Name +'Click'); //取得MenuItem的Click事件的指针 保存到TTreeNode的Data中 if PMenuItem.Items[i].Count>0 then begin SetToTreeView(PMenuItem.Items[i], titem); end; end;end;procedure TForm1.tv1Change(Sender: TObject; Node: TTreeNode);var _Click: procedure(Sender: TObject);begin if Node.Data<>nil then begin @_Click := Node.Data; //将该指针赋值给变量方法 _Click(nil); //TreeView的OnChange事件中调用即可 end;end;procedure TForm1.N3Click(Sender: TObject);begin showmessage('新建');end;procedure TForm1.N4Click(Sender: TObject);begin showmessage('保存');end;procedure TForm1.N11Click(Sender: TObject);begin showmessage('选项1');end;procedure TForm1.N21Click(Sender: TObject);begin showmessage('选项2');end;end.