procedure TForm1.CallPro(ProgID:string);
var
   base:TBase_0F;
begin
          if (ProgID='M0001') then base := TM0001F.Create(self)
     else if (ProgID='M0002') then base := TM0002F.Create(self)
     else if (ProgID='M0003') then base := TM0003F.Create(self)
     else if (ProgID='M0005') then base := TM0005F.Create(self)
     else if (ProgID='M0006') then base := TM0006F.Create(self)
     else if (ProgID='M0007') then base := TM0007F.Create(self)
     else base := nil;     if base <> nil then
     try
        base.ShowModal;
     finally
        base.Free;
     end;end;
我不希望這樣寫,還有其他方法嗎?

解决方案 »

  1.   

    嗯,是不错啊,但是如果有多个地方有这种调用方法的话,你可以如下试一下:
    定义:
     TOFClass = class of TBase_0F;
      aclass : array[0..6] of TOFClass;
    在Create方法中:
      aclass[0] := TM0001F;
      aclass[1] := TM0002F;
    .......
      aclass[6] := TM0007F;
    然后
    procedure TForm1.CallPro(ProgID:integer);
    begin
      if ProgID in [0..6] do 
        with aclass[ProgID].Create(self) of begin
          ShowModal;
          Free;
        end;
    end;呵,,如果觉得不错的话,,把分分给我吧,^-^
      

  2.   

    这里有个思路,ProgID如果有很多的话,可以用下面的方法。var
      MyFormClass: array[1..7] of TFormClass = (TM0001F, TM0002F, TM0003F, TM0004F, TM0005F, TM0006F, TM0007F);
      MyString: array[1..7] of string = ('TM0001F', 'TM0002F', 'TM0003F', 'TM0004F', 'TM0005F', 'TM0006F', 'TM0007F');procedure TForm1.Button2Click(Sender: TObject);
    var
      I: Integer;
      ProgID: string;
      Base: TForm;
    begin
      Base := nil;
      ProgID := 'TM0001F';
      for I := Low(MyString) to High(MyString) do
        if MyString[I] = ProgID then
        begin
          Base := MyFormClass[I].Create(Self);
          Break;
        end;
      if Base <> nil then
        Base.Show;
    end;