程序大概如下
procedure TForm.on***(sender: TObject);
var
  Form : TForm;
  Button : TButton;
  Edit: TEdit;
  .....
begin
  Form:=TForm.Create(self);
  Button:=TButton.Create(self);
  Button.Parent:=Form;
  Button.Caption:='dfs';
  ........
end;
现在我想为这个成的button添加一个OnClick事件来改变From或其它控件的状态.
我试过在外面写一个Procedure 如Procedure TForm.OnC(Sender:TObject) 然后再让 Button.Onclick:=Onc; 
这样做有一个问题, form及其它的控件都是局部变量. 在外面定义的过程(OnC) 无法访问到.我知道可以把要生成的控件设为全局, 这么做是不是有点笨啊, 有没有其的办法.

解决方案 »

  1.   

    笨吗?我只是问问。要么就吧OnC写在事件里面,然后用Form.ShowModal来显示窗体。
      

  2.   

    不好意思,纠正一下, From是在From1的一个事件里动态创建的。
    第一行代码应改为
    procedure TForm1.on***(sender: TObject);
      

  3.   

    不好意思,怪我没写好, OnC是Form1的一个事件。 
      

  4.   

    程序大概如下
    procedure TForm1.on***(sender: TObject);
    var
      Form2 : TForm;
      Button : TButton;
      Edit: TEdit;
      .....
    begin
      Form2:=TForm.Create(self);
      Button:=TButton.Create(self);
      Button.Parent:=Form;
      Button.Caption:='dfs';
      ........
    end;
    现在我想为这个成的Button添加一个OnClick事件来改变From2或其它控件的状态.
    我试过在外面写一个Procedure 如Procedure TForm1.OnC(Sender:TObject) 然后再让 Button.OnClick:=Onc;  
    这样做有一个问题, Form2及其它动态生成的控件都是局部变量, 外面定义的过程OnC无法访问到.我知道可以把要生成的控件设为全局,这样OnC就可以访问了。 这么做是不是有点笨啊, 有没有其的办法.
      

  5.   

    Button.Click:=你的某个过程!
    然后面过程中写入,按钮点击后要执行的功能~!
      

  6.   

     Button.Parent:=Form;
     Button.Caption:='dfs';
     Button.OnClick:=self.WhenClick;
    然后
    procedure TFormMain.WhenClick(Sender: TObject);
    begin
      //onclick代码处理
    end;
      

  7.   

    要是我用这种方法的话,我要怎么访问我在这个过程TForm.on***中动态生成的变量呢(比如访问Edit.text) 我试过,如果直接用,会提示变量没有声明。 此外我还试过用sender一直往回找,找到form2 然后用form2进行控件遍历的方法,结果还是不行,内存出错。
    form2是一个在按下Ctrl+F 时弹出一个窗口类似查找功能。 我不想在与这个临时性的窗口与其的内容对其他的代码产生什么影响(新过程除外)。
    有什么其它的办法,方案吗。 
      

  8.   


    //动态 生成控件指定  NAME   e := tedit.Create(Form);
       e.Parent := Form;
       e.Text := '123';
       e.Name := 'edit';//过程调用时动态找
     if FORM.FindComponent('edit') is tedit then tedit(FORM.FindComponent'edit')).Text := '456';
      

  9.   

    请问动态查代的代码要加到哪里, 我试过加到form1的一个过程里,用Components[index]调用结果不行。