是否可能知道表单是通过Show()还是ShowModal()显示的?

8

我的环境: C++ Builder XE4

FormB是否能够知道它是通过Show()还是ShowModal()显示的?

在FormA中:

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

在FormB中:

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

16

您可以在表单的onShowEvent中测试FormState中的fsModal

我为您制作了一个小例子:

创建一个新项目,并添加一个额外的表单。在主表单上放置两个按钮,并让它们显示您的第二个表单:

uses Unit2;

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

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

没有什么魔法 :D

然后在你的Form2上添加一个OnShowEvent

    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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接