如何编写由程序动态生成的控件的事件,控件是在的form.show事件中动态生成的。

解决方案 »

  1.   

    procedure test;
    begin
    showmessage('d');
    end;
    var b1:tbutton;
    begin
    b1:=tbutton.create(nil);
    b1.onclick:=test;
    //b1.free;
    end;
      

  2.   

    procedure test;
    var
      mybutton:Tbutton;//先定义类
    begin
      mybutton:=Tbutton.create(self);//动态生成按钮
      mybutton.parent:=form1;
      mybutton.Name:='name1';
      ....
    end;
      

  3.   

    将事件负值:如流星所说:
    b1.onclick:=test;
      

  4.   

    如果控件事件有相似性,可以这样
    ChangeSkinPopItems:array[0..5] of TMenuItem; //换肤菜单
    procedure ChangeSkinPopMenuHandler(Sender:TObject);
    ****************
    procedure TMain.ChangeSkinPopMenuHandler(Sender:TObject);
    begin
      with Sender as TMenuItem do
        begin
          //做你想做的
        end;
    end;
    ****************
    //动态生成菜单,
    for ChangeSkinPopi:=0 to SkinList.Count-1 do
        begin
          ChangeSkinPopItems[ChangeSkinPopi]:=TMenuItem.Create(Self);
          ChangeSkinPopMenu.Items.Add(ChangeSkinPopItems[ChangeSkinPopi]);
          ChangeSkinPopItems[ChangeSkinPopi].Caption:=SkinList.Strings[ChangeSkinPopi];
          ChangeSkinPopItems[ChangeSkinPopi].OnClick:=ChangeSkinPopMenuHandler; //重要的一句
        end;
      

  5.   

    由於是动态生成物件, 记着用完後, 要释放内存.  用
    Var MyObject :T物件;...    MyObject := T物件.Create(self);
    try
       .....
       使用MyObject
       .....
    finally
     FreeAndNil(MyObject);
    end;
      

  6.   

    同意  I_wanttoknow(小飞) 说的对!
      

  7.   

    你试试如下代码。
    注意:编写动态控件的事件,参数的个数和类型必须相对应。
    如下OnClick事件,test过程后必须有(Sender:TObject),调用时可以不用参数。其它方法也是一件。
    procedure TForm1.FormCreate(Sender: TObject);
    var butoon:tbutton;
    begin
      butoon:=tbutton.create(nil);
      butoon.Parent:=self;
      butoon.onclick:=test;
    end;procedure TForm1.test(Sender: TObject);
    begin
       showmessage('Test  OK!');
    end;