首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-03-29 
动态创建的控件的OnClick过程//动态创建窗体procedure FCreate(FormClass: TFormClass FName: String)be

动态创建的控件的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要求的不一致。

热点排行