关于actionlist组件的应用 ( 积分: 50 )

K

kwmxw

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用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]
这种情况怎么修改?
 
我想用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]
这种情况怎么修改?
 
因为在你第一次单击按钮以后把N1和N2的Action指向了ActionList中的Action1,
再次单击它们的时候,就不会执行你在N1和N2中写的代码,而是自动调用了ActionList中的Action1了。

你可以把N1N2的事件去掉,直接把Action指向ActionList中的Action1,
在Action1Excute事件中判断,如果点击的是N1则sqltxt:= '张三',否则sqltxt:='李四';
 
不好意思,应该如何判断呢?
 
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;
 
在执行
if twc is TMenuItem then 出现错误应该怎么解决?
 
不好意思,对于TButton等控件,这样做是可以的。
我再看一看吧。
 
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;
 
能力有限搞不清楚了,
原因是TMenuItem和TWinControl的类型不兼容。
对于以前给你的答案,对于TButton,TEdit,TMemo等类型是没问题的。

我看你还是写两个Action,然后分别指定把。
 
to:duanhai
你的程序测试过吗?
当把Action指定以后,程序是不会执行N1.onclick下的代码了。
 
to:duanhai
不好意思看错了,原来Action是在N1和N2的代码下只是执行,并没有指定。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
611
import
I
I
回复
0
查看
509
import
I
顶部