关于actionlist组件的应用
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