一个工程中有form1,form2,form3,form4,form5,form6,form7这些窗体。数据表tb1的字段为:
id(number) ,name(varchar)
1,form1
2,form2
....
7,form7.
然后一个输入框,根据输入框中的数,来显示对应的窗体。
假如查到的窗体名字放在变量sname中,我这样做不行。
 sf:array[0..9] of tform;
 sf[0].name:=sname;
 sf[0].showmodle;请问要怎么做呢?

解决方案 »

  1.   

    好像有个findcomponent方法的,好久不用delphi,印象不深了
    sf[0].name := sname;
    ((TForm)FindComponent(sf[0].name)).showmodle;
      

  2.   

    好像这样可以的:
    for i:=0 to Application.Components.Count-1 do
    begin
      if (Application.Components[i] is TForm)
        and ((Application.Components[i] as TForm).Caption = vName) then
      begin
        (Application.Components[i] as TForm).Show;
        break;
      end;
    end;
      

  3.   

    qybao(阿宝) ( ) 信誉:100 
    的方法應該 ok
      

  4.   

    呵﹐這個人跟我想到一塊去了﹐ 不過這個做起來好煩的﹐我經過看書﹑上CSDN等好几個論壇﹐終天搞也來了。把這段代碼給你們吧:大家也看一下還能怎么改一下
    unit uAllUserOperation;interfaceuses windows, forms, classes, sysutils, dialogs;
    procedure ShowForm(FFormName: string);
    function CreateForm(FFormName: string): TCustomForm;implementationuses uUserVindicate, uPublicFun, Uprovider,
      uBargain, uPurchQuery, uOrder, uQuery, uinput, uoutput;function CreateForm(FFormName: string): TCustomForm;
    var
      AFormClass: TFormClass;
    begin
      result := nil;
      try
        if FFormName = '' then raise Exception.Create('Need Class Name!');
        AFormClass := TFormClass(FindClass('T' + FFormName));
        result := AFormClass.Create(application);
      except
        on E: Exception do
          Msg1(E.Message)
      else raise;
      end;end;procedure ShowForm(FFormName: string);
    var
      AFormClass: TFormClass;
    begin
      try
        if FFormName = '' then raise Exception.Create('Need Class Name!');
        AFormClass := TFormClass(FindClass('T' + FFormName));
        with AFormClass.Create(application) do
        begin
          Lockwindowupdate(0);
          showmodal;
          free;
        end;
      except
        on E: Exception do
          Msg1(E.Message)
      else raise;
      end;
    end;
    initialization
      RegisterClass(tuserVindicateFrm1);
      RegisterClass(TproviderFrm1);
      RegisterClass(Torderfrm1);
      RegisterClass(TQueryfrm1);
      RegisterClass(TBargainfrm1);
      RegisterClass(tinputfrm1);
      RegisterClass(toutputfrm1);
      //RegisterClass(TPaperDatafrm);
      //RegisterClass(TBargainfrm);
      //RegisterClass(TPurchQueryfrm0);end.