2015-10-04 11 views
7

私の環境: C++ BuilderのXE4それはフォームが表示()またはShowModalで示されているかを知ることができる()

FormBが表示()またはShowModal()で示されているFormBを知ることは可能ですか?フォームAで

:FormBで

void __fastcall TFormA::Button1Click(TObject *Sender) 
{ 
    FormB->Show(); 
    // FormB->ShowModal(); 
} 

void __fastcall TFormB::FormShow(TObject *Sender) 
{ 
    // with some if sentence to know Show() or ShowModal() 
} 

答えて

14

あなたは、フォームのonShowEventでfsModal in FormStateのためにテストすることができます。

私はあなたの小さな一例を作りました:

は、新しいプロジェクトを作成し、それに余分なフォームを追加します。メインフォーム上の2つのボタンを配置していない、と彼らはあなたの第二のフォームを表示してみましょう:

uses Unit2; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Form2.Show; 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
    Form2.ShowModal; 
end; 

ここにはマジックを:D

は、その後、あなたのForm2OnShowEventを追加します。

行う必要があります
procedure TForm2.FormShow(Sender: TObject); 
    begin 
     if fsModal in FormState then 
     Caption := 'ShowModal' 
     else 
     Caption := 'Show';  
    end; 

あなたのためのトリック。

+4

C++ Builderでは、 'if(FormState.Contains(fsModal)){' – sevenOfNine

関連する問題