读书人

动态创建的控件的OnClick过程解决办法

发布时间: 2012-03-29 12:53:12 作者: rapoo

动态创建的控件的OnClick过程
//动态创建窗体
procedure FCreate(FormClass: TFormClass; FName: String);
begin
if HasForm(FName) then exit; //自定义窗体判断函数
try
with FormClass.Create(Application) do
Show;
except
StatusBarText(6, 0 , '创建'+ FName + '失败');
Exit;
end;
end;

//响应Nav ONCLICK
procedure NavItemsOnClick(Sender:TObject; NICaption, FName:String; FormClass: TFormClass);
begin
if (sender as TdxNavBarItem).Caption = NICaption then
begin
FCreate(FormClass,'FName')
end;
end;

调用navItemsOnClick

NBItm.OnClick := NavItemsOnClick(self, FieldByName('_menuCaption').Value, 'frmLogin', TfrmLogin);

我的本意是不想 在 自定义的OnClick过程中一直 if (sender as TdxNavItem).Caption = '' then
这样判断哪个 Item被单击

而是通过向navItemOnClick传入 参数

但是 发生 [Error] UNav.pas(81): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'
错误

哪位高人帮忙看看

[解决办法]
这东西怎么能随便定义呢,要和他的OnClick事件有一样的参数才行,sender就是你所点击的组件
[解决办法]
参数类型不对,你能将一个string 类型直接赋值给一个Integer吗

OnClick也是一种类型..
[解决办法]
onclick是TNotifyEvent类型
TNotifyEvent的定义如下
TNotifyEvent = procedure(Sender: TObject) of Object;

lz的问题有两点:
1. NavItemsOnClick是个普通过程,不是类的方法,TNodifyEvent是of object,说明这是一个类的方法
2. NavItemsOnClick的形参和TNotifyEvent要求的不一致。

读书人网 >.NET

热点推荐