假设有两个菜单项:A,B,分别调用窗体a,b,当第一次(用show)打开a,b窗体时,都能正常打开,问题是,在a、b都打开时,b处于活动窗体状态,此时点击A菜单想把a窗体变为活动窗体,但是没有反应。请问为什么?怎么才能解决?

解决方案 »

  1.   

    procedure TMainForm.ResourceInExecute(Sender: TObject);
    var
       frmResourceIn: TfrmResourceIn;
       I : Integer;
    begin
       if Application.FindComponent('frmResourceIn')=nil Then
       begin
         frmResourceIn:= TfrmResourceIn.Create(Application);
         frmResourceIn.Show;
       end
       else begin   
          //frmResourceIn.Active := true;
       end;
    end;
    调用窗体的过程。
      

  2.   

    procedure TMainForm.ResourceInExecute(Sender: TObject);
    var
       frmResourceIn: TfrmResourceIn;
       I : Integer;
    begin
       if Application.FindComponent('frmResourceIn')=nil Then
       begin
         frmResourceIn:= TfrmResourceIn.Create(Application);
         frmResourceIn.Show;
         frmResourceIn.SetFocus;
       end
       else begin   
          //frmResourceIn.Active := true;
       end;
    end;
      

  3.   

    procedure TMainForm.ResourceInExecute(Sender: TObject);
    var
       frmResourceIn: TfrmResourceIn;
       I : Integer;
    begin
       if Application.FindComponent('frmResourceIn')=nil Then
       begin
         frmResourceIn:= TfrmResourceIn.Create(Application);
         frmResourceIn.Show;
       end
       else begin   
          frmResourceIn.SetFocus;
       end;
    end;
      

  4.   

    procedure TMainForm.ResourceInExecute(Sender: TObject);
    var
       frmResourceIn: TfrmResourceIn;
       I : Integer;
    begin
       if Application.FindComponent('frmResourceIn')=nil Then
       begin
         frmResourceIn:= TfrmResourceIn.Create(Application);
         frmResourceIn.Show;
       end
       else begin   
          frmResourceIn.BringToFront;
       end;
    end;
      

  5.   

    为什么不用这样的方法去做呢?
    var
       frmResourceIn: TfrmResourceIn;
    //这个是窗体的实例对象,目前可以把他放到外面去定义,成为全局的变量procedure TMainForm.ResourceInExecute(Sender: TObject);
    begin
       if frmResourceIn = nil Then
         frmResourceIn:= TfrmResourceIn.Create(Application);
       frmResourceIn.Show;
       
    end;
      

  6.   

    procedure TMainForm.ResourceInExecute(Sender: TObject);
    var
       frmResourceIn: TfrmResourceIn;
       I : Integer;
    begin
       if Application.FindComponent('frmResourceIn')=nil Then
       begin
         frmResourceIn:= TfrmResourceIn.Create(Application);
         frmResourceIn.Show;
       end
       else begin   
          frmResourceIn.BringToFront;
       end;
    end;这种做法有错误,报出抽象错误
      

  7.   

    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project PMS.exe raised exception class EAccessViolation with message 'Access violation at address 005A11A1 in module 'PMS.exe'. Read of address 04C65213'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help   
    ---------------------------
    procedure TMainForm.ResourceInExecute(Sender: TObject);
    var
       frmResourceIn: TfrmResourceIn;
       I : Integer;
    begin
       if Application.FindComponent('frmResourceIn')=nil Then
       begin
         frmResourceIn:= TfrmResourceIn.Create(Application);
         frmResourceIn.Show;
       end
       else begin   
          frmResourceIn.SetFocus;
       end;
    end;
    这种方法也有错
      

  8.   

    procedure TMainForm.ResourceInExecute(Sender: TObject);
    begin
       if Application.FindComponent('frmResourceIn')=nil  Then
         frmResourceIn:= TfrmResourceIn.Create(Application);
       frmResourceIn.Show;
       
    end;这样就可以了