如何利用一個string變量,動態創建form,也就是form已經做好,我想通過一個字符串變量它的內容等於該form的name,該如何實現通過這個string來創建和打開這個form

解决方案 »

  1.   

    这个要使用类引用,在这儿讲清楚有些困难,Nicrosoft的delphi《高手突破》中有解说,以及《delphiX从入门到精通》系列的书中也有,建议你去看看
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      str : String;
    begin
      str := 'Form2';
      if str = 'Form2' then
      begin
        Form2 := TForm2.Create(Self);
        Form2.Show;
      end;
    end;
      

  3.   

    樓上的哥們,您那樣做好象不行,因為我要根據string動態創建表單,表單名字等於字符串
      

  4.   

    http://community.csdn.net/Expert/topic/3330/3330916.xml?temp=.3909113
      

  5.   

    我仔细看过TComponent.Name的帮助,控件的名称是可以在运行期间改变的,只是改变后引用原名称会引发异常,
    解决方法:
    1.设计好你要用到的模板窗体,改为动态创建,
    2.在模板窗体内部避免直接引用窗体名,如无法避免,就使用TForm(Sender)来代替窗体名称,
    3.在使用时动态创建窗体,
    4.改变窗体名称为你定义的字符串,
    例:
    (假设你已定义全局窗体名变量_FormName:String;)
    (模板窗体为TSharedForm)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sf:TForm
    begin
      sf:=TSharedForm.Create(Self);
      sf.Name:=_FormName;
      sf.ShowModal;
    end;
    我测试通过,不知道你说的是不是这个意思?
      

  6.   

    uses Unit2;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      RegisterClass(TForm2);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      CreateForm('Form2');
    end;procedure TForm1.CreateForm(sName: string);
    var
      cForm: TForm;
      sFCName: string;
      sFClass: TFormClass;
    begin
      sFCName := 'T' + sName;
      sFClass := TFormClass(FindClass(sFCName));
      if sFClass = nil then Exit;
      cForm := TForm2.Create(self);
      cForm.Show;
    end;