我想在运行时给已设计或动态创建过的控件重新定义响应事件,如何处理?

解决方案 »

  1.   

    Btn := TButton.create;
    Btn.OnClicked:=FuncName();
      

  2.   

    如果要为动态控件加入事件
    直接写一个方法或过程函数就可以了
    但有一点要注意你的过程的参数一定要和控件的事件的参数相同
    正所谓要赋值也要长得一样才能赋啊
    Btn.OnClicked:=FuncName(Sender: TObject);
      

  3.   

    给你个例子:
    Type   //下面的可以先在form上加控件后把它的事件考来
       procedure ClientSocket1Connect(Sender: TObject;     
          Socket: TCustomWinSocket);
        procedure ClientSocket1Disconnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
          ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    在Creat后
    ClientSocket.OnConnect := ClientSocket1Connect;
    ClientSocket.OnDisconnect := ClientSocket1Disconnect;
    ClientSocket.OnRead:= ClientSocket1Read;
    ClientSocket.OnError := ClientSocket1Error;
      

  4.   

    谢谢,这类方法只是在动态创建控件时就赋予了事件, 我需要的是,当控件动态创建后, 在需要的时候再赋与它相应的事件,例如:
    ....
    Btn := TButton.create;
    //Btn.OnClicked:=FuncName();  (假设这个代码在此时并未写出)
    ....procedure form1.FuncName(...)
    begin
    ...
    end如果按下button2,则执行:
    Btn.OnClicked:=FuncName(); 但是在编译时出错,提示OnClicked未定义,谁知道应该错误在什么地方?
      

  5.   

    Btn.OnClicked 应为 Btn.OnClick
      

  6.   

    为什么要在需要的时候再赋与它相应的事件呢?
    这样好象并没有多大的意义啊?
    而且事件你都必须先在Type下声明啊!
      

  7.   

    to ifiles(iwan):
    谢谢, 但不是这个问题
      

  8.   

    就象上面说的那样(dajianshi)
    只需要注意参数相同就可以了
    YouProc()的参数要与该事件的参数一致