怎么在动态生成的控件上进行编程?(100分)

  • 主题发起人 主题发起人 liersbaby
  • 开始时间 开始时间
L

liersbaby

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我动态生成了一个form,上面有一个动态生成的button,想点这个button弹出一个messagebox,怎么做?(最好有完整的程序,我比较菜)
 
这个我来,可以动态赋给按钮点击事件函数吗。
先在类的私有或者公有部分定义一下按钮单击事件函数的原型。以下是在公有部分中定义。
public
procedure MyMouseClick(Sender:TObject);
以下是动态创建按钮的代码。
var
Button1:TButton;
begin
Button1:=TButton.Create(Self);
Button1.OnClick:=MyMouseClick;//此处我没有调试,如果不行的话,那么将@MyMouseClick赋给它。
Button1.Parent:=Form1;//为按钮指定父窗口,指有这样按钮才能显示出来。
end;

procedure TForm1.MyMouseClick(Sender:TObject);
begin
MessageBox(Handle,'您单击了动态生成的按钮','提示信息',MB_OK);
end;

动态生成窗口也可以同样的方法,只不过建立您最好不要去这样做。
 
To liguang:
你的方法可以,不过MyMouseClick过程在什么地方定义都行。
Button1.OnClick:=MyMouseClick即可。
 
补充两句:
事实上,Delphi使用了授权机制来管理多个控件的事件。比如onclick是按钮的
事件,但是在单元中它的声明是form1.button1click,即button1把它的事件处理器
onclick授权给了窗体,成为窗体的一个对象方法。在窗体的文本文件中view as text
可以看到类似的语句:
button1.onclick;=button1click;
正是这条语句把button1的事件处理器(指向过程的指针)与form1的对象方法
button1click联系到一起。
因此在程序中你可以随时改变对象的事件处理器以改变对象的行为方式。
 
多人接受答案了。
 
后退
顶部