加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么在firemonkey中的form.create之前调用form.show

发布时间:2020-12-15 04:17:55 所属栏目:大数据 来源:网络整理
导读:每个人都知道为什么在Form.shate之前调用Form.show,如果属性Form.visible = true. 我在Delphi XE7和Delphi 10 Seattle(为Windows编译的Fmx表单)中测试过 例如: procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin //break point here i
每个人都知道为什么在Form.shate之前调用Form.show,如果属性Form.visible = true.

我在Delphi XE7和Delphi 10 Seattle(为Windows编译的Fmx表单)中测试过

例如:

procedure TForm1.FormCreate(Sender: TObject);
    var
      i : integer;
    begin
      //break point here is called before if form.visible = false
      i := 0;
    end;

procedure TForm1.FormShow(Sender: TObject);
var
  i : integer;
begin
  //break point here is called before if form.visible = true
  i := 0;
end;
procedure TForm1.FormShow(Sender: TObject); var i : integer; begin //break point here is called before if form.visible = true i := 0; end;

解决方法

如果主窗体未设置为在设计器中可见,则调用CreateMainForm()将强制窗体在构造完成后可见(因此在OnCreate触发后).
procedure TApplication.CreateMainForm;
var
  I: Integer;
begin
  if FMainForm = nil then
  begin
     // here creating form...
  end;

  if FMainForm <> nil then
    FMainForm.Visible := True;  //** force visible here
end;

否则,窗体的Visible属性在调用TCommonCustomForm.Loaded()期间设置,该窗体在构造过程中由DFM流系统调用,因此当窗体变为可见时触发OnShow.在流式传输DFM之后,直到构造完成后才会调用OnCreate.

最重要的是,您不应该假设何时将执行这些事件.如果您需要控制事情发生的顺序,您需要明确地执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读