var
ddd:string;
begin
ddd:='myform';
我想执行ddd变量所指窗体中的BitBtn1按钮的单击事件,如何写了?
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ddd, bbb: string;
      f: TForm;
      b: TBitBtn;
    begin
      ddd := 'Form2';
      bbb := 'BitBtn1';
      if Application.FindComponent(ddd) <> nil then
      begin
        f := TForm(Application.FindComponent(ddd));
        if f.FindComponent(bbb) <> nil then
        begin
          b := TBitBtn(f.FindComponent(bbb));
          if Assigned(b.OnClick) then
          begin
            b.Click;
          end;
        end;
      end;
    end;
      

  2.   

    上面的方法对于以存在的form2窗体起作用,如果form2是动态生成的,那就不行了。请问把程序修改一下,能否实现呢了?请帮助。小弟真心的说声谢谢。
      

  3.   

    那你就在执行上面的代码前先动态创建啊
    APPLICATION.CREATEFORM(TFROM,FORM);
    FORM.VISIBLE := FALSE;
      

  4.   

    不知道是不是这个意思,你先看看
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ddd : string; //存储form信息
    begin
      ddd:='myform';   //建议用一数组保存,好比较
      if ddd='myform' then  //判断是那一种form
      begin
        if myform=nil then
        begin
          myform:=Tmyform.create(self);
          myform.Show;
        end;
      end else
      if ddd='form2' then
      begin
        if form2=nil then
        begin
          form2:=Tform2.create(self);
          form2.Show;
        end;
      end;
      ...
    end;
      

  5.   

    var
    newform:tform;
    begin
    newform:= Tform1.Create(nil);
    newform.name:='form2';
    newform.VISIBLE:=true;
    newform.show;
    end;我动态创建了一个窗口,名称就是form2,但是执行时,   
    if Application.FindComponent(ddd) <> nil then 语句都通不过。
      

  6.   

    那是因为你FindComponent(ddd) 和上面的newform:tform;的名字不一样嘛~~
      

  7.   

    找到原因了:
    Application.FindComponent(ddd)这种方法,在创建窗口时,一定要用
      Application.CreateForm(TForm1, Form1);

     newform:= Tform1.Create(Application);