现在有一个窗体Form1,我想打开这个窗体,最简单的是Form1.show;
但是如果From1只是窗体的名字,是一个字符串,不是TForm类,我如何根据这个字符串打开这个窗口!谢谢!

解决方案 »

  1.   

    现在是这样的,我把所有的窗体的名字存放在数据库里面,动态声称菜单调用这些窗体,数据库里面存放的肯定只能是这个窗体的名字,是个字符串,不可能知道句柄,我曾经在一个ERP系统里面见过这种做法,请大家帮忙研究一下!
      

  2.   

    我想到一个办法,用一个超级大的全局Tform数组存放所有的窗体,然后在程序面判断,然后创建,就是麻烦了一点,每次添加新的窗体,都要去改变这个数组!
      

  3.   

    delphi 里面有没有 eval() 函数啊??
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to Application.ComponentCount-1 do
        if UpperCase(TComponent(Application.Components[i]).Name) = 'FORM2' then
        begin
          TForm(Application.Components[i]).Show;
          break;
        end;
          //form2.Show;
    end;
      

  5.   

    poleax,如果窗体都是动态建立的,并不是一启动就自动创建的,可以吗?
      

  6.   

    http://expert.csdn.net/Expert/topic/1869/1869918.xml?temp=.6062586
    看看这里,这里专门讨论了这个问题
      

  7.   

    厉害,佩服,学到不少东东,我把所有的窗体都写成了这形势:
    TmyForm = class of TformN;
      TFormN = class(TForm)然后在腰调用的窗体里面的Create加上
      RegisterClasses([TFormN]);然后
       var a:Tform;
    begin
    a := Tmyform(GetClass('TFormN')).Create(nil);
    a.Show;
    end;嘿嘿,居然成功了!太好了,谢谢大家的捧场!发分了!