我如何为动态生成的控件加事件(200分)

  • 主题发起人 主题发起人 help
  • 开始时间 开始时间
H

help

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序运行时动态生成了一组控件
var
acomponent:array of tdbmemo;
在控件生成后我想动态生成该组控件的事件
我不知道怎样生成??主要是不知道如何声名
我用了比较笨的方法,去调用其他窗体中的控件的事件
如是单纯的点激事件每问题,但有参数的事件就不行了如
OnMouseUp:= form2.DBMemo1.onMouseup后面无论加什么参数都报错


 
和click一样。
acomponent:=tdbmemo.create(self)
acomponent.onmouseup:=MouseEvent;//TMouseEvent
 
声明:
private
procedure myMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

赋值:
acomponent.OnMouseUp:=myMouseUp;
acomponent.Tag:=i;

在下面的过程中通过(Sender as TDBDemo).Tag识别各component,进行处理。
procedure TForm1.myMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
 
事件方法要声明在类中
procedure TForm1.myMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

然后在OnCreate
OnMouseUp:=myMouseUP
就可以了

 
用O*O的方法编译时没问题,但我在引用该控件时报错"invalid class typecast"
我用的是DBMEMO
我猜也许是该控件属性的初值没给完全
我的属性初值如下
left:=80;
width:=50;
height:=20;
top:=70+25*i;
acomponent.OnMouseUp:=myMouseUp;
datasource:=form1.DataSource1;
 
在类中声明:
procedure HandleForm(Sender: TObject);


程序中:
Labels:=TLabel.Create(nil);
Labels.OnClick:=HandleForm

procedure TL_FuncForm.HandleForm(Sender: TObject);
begin


end;


注意:HandleForm事件中的参数个数、类型、顺序必须与LabelsClick事件中的参数保持一致
 
是那句出了问题?
 
多人接受答案了。
 
后退
顶部