当前位置:主页>delphi教程/企业管理软件> 文章内容

关于actionlist组件的应用

发布时间:2010-01-20 | QQ免费站
1楼: 我想用mainmenu组件中的两个N1,N2来调用actionlist的组件action1 程序如下: sqltxt为全局变量 procedure TFormmain.N1lick(Sender: TObject); begin sqltxt:=‘张三‘; n1.action:=action1; n1.action.execute; end; procedure TFormmain.N2lick(Sender: TObject); begin sqltxt:=‘李四‘ n2.action:=saledata.action1; n2.action.Execute; end; procedure Action1Execute(Sender: TObject); begin Memo1.Text:=sqltxt; end; 运行结果如下: 点击N1: memo1中显示“张三”; 点击N2: memo1中显示“李四”; [red]但是再点击N1: memo1中显示“李四”[/red] 这种情况怎么修改?

字串7

2楼: 因为在你第一次单击按钮以后把N1和N2的Action指向了ActionList中的Action1, 再次单击它们的时候,就不会执行你在N1和N2中写的代码,而是自动调用了ActionList中的Action1了。 你可以把N1N2的事件去掉,直接把Action指向ActionList中的Action1, 在Action1Excute事件中判断,如果点击的是N1则sqltxt:= ‘张三‘,否则sqltxt:=‘李四‘; 字串3

3楼: 不好意思,应该如何判断呢?

字串6

4楼: procedure TForm1.Action1Execute(Sender: TObject); var twc : TWinControl; begin twc :=Screen.ActiveControl; if twc is TMenuItem then if TMenuItem(twc) = N1 then sqltxt := ‘张三‘ else if TMenuItem(twc) = N2 then sqltxt := ‘李四‘; Memo1.Text:=sqltxt; end;

字串7

5楼: 在执行 if twc is TMenuItem then 出现错误应该怎么解决?

字串5

6楼: 不好意思,对于TButton等控件,这样做是可以的。 我再看一看吧。 字串9

7楼: procedure TFormmain.N1lick(Sender: TObject); begin sqltxt:=‘张三‘; //n1.action:=action1; action1.execute; //n1.action.execute; end; procedure TFormmain.N2lick(Sender: TObject); begin sqltxt:=‘李四‘ //n2.action:=saledata.action1; //n2.action.Execute; action1.execute; end; procedure Action1Execute(Sender: TObject); begin Memo1.Text:=sqltxt; end;
字串6

8楼: 能力有限搞不清楚了, 原因是TMenuItem和TWinControl的类型不兼容。 对于以前给你的答案,对于TButton,TEdit,TMemo等类型是没问题的。 我看你还是写两个Action,然后分别指定把。
字串9

9楼: to:duanhai 你的程序测试过吗? 当把Action指定以后,程序是不会执行N1.onclick下的代码了。 字串9

10楼: 谢谢!
字串6

11楼: to:duanhai 不好意思看错了,原来Action是在N1和N2的代码下只是执行,并没有指定。 字串6