在一单据上动态创建一Button控件,并且要为此Button控件加上OnClick(点击)事件。即达到运行时点击动态创建出来的控件,它要能能够执行一事件。请各高手帮忙解答?谢谢!!

解决方案 »

  1.   

    先建一个procedure Button1Click(Sender: TObject);并实现它,再动态设Button1Click.OnClick := Button1Click;就OK,试一试
      

  2.   

    private
    procedure clickkk(Sender: TObject);
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      butt: Tbutton;
    begin
      butt := Tbutton.Create(self);
      butt.Parent := form1;
      butt.left := 45;
      butt.Top := 45;
      butt.Caption := 'dfd';
      butt.OnClick := clickkk;end;procedure TForm1.clickkk(Sender: TObject);
    begin
      showmessage('OK');
    end;end.
      

  3.   

    //Delphi中的控件数组的例子unit Unit1;
    {New一个Application,copy代码覆盖原代码,在对象监视器(Object Inspector)
    中通过下拉选择,设置Form1的OnCreate事件为FormCreate,然后直接运行就可看到效果}
    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure MyClick(Sender:TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      a: array[1..100] of TButton;implementation{$R *.dfm}procedure TForm1.MyClick(Sender: TObject);
    var
      i: integer;
      nam: string;
    begin
      i := StrToInt(Trim(Copy(TButton(Sender).Name, 7, 3)));
      TButton(Sender).Visible := not TButton(Sender).Visible;
      i := i + 1;
      nam := 'Button' + IntToStr(i);
      if i <= 100 then
        TButton(FindComponent(nam)).Visible := not TButton(FindComponent(nam)).Visible
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
    begin
      for i := 1 to 100 do
      begin
        a[i] := TButton.Create(self);
        with a[i] do
        begin
          Top := (i-1) div 10 * 20;
          Left := (i-1) mod 10 * 20;
          Height := 20;
          Width := 20;
          Name := 'Button' + IntToStr(i);
          Caption := '';
          Parent := Form1;
          OnClick := MyClick;
        end;
      end;
      Form1.AutoSize := True;  
      Form1.AutoSize := False;
    end;end.
      

  4.   

    谢谢各位!但我还有个疑问,在你们楼上所举例中,都没有提高最后释放实例,难道这样不会造成内存泄漏?我的写法是:
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        FButton: TButton;
        procedure Test(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Test(Sender: TObject);
    begin
      ShowMessage('Hello!');
    end;procedure TForm2.FormCreate(Sender: TObject);
    begin
      FButton := TButton.Create(nil);
      FButton.Parent := Form2;
      FButton.OnClick := Test;
    end;procedure TForm2.FormDestroy(Sender: TObject);
    begin
      FButton.Free;
    end;end.
    即我会加上FButton.Free,释放实例。
    各大虾又是怎样理解的呢?