FormCreate、FormShow、FormActivate事件的区别与运用

FormCreate、FormShow、FormActivate事件的区别与运用

    一、事件的激发时段

  1. FormCreate在窗口的创建时激发;
  2. FormShow在窗体建立后,显示时触发;
  3. Formactivate在窗体之间切换被激活时触发;

    二、运行机制

    1、当窗口中创建、显示并作为当前运用(激活焦点)窗口时(三者的运行顺序)

    (1)form1.onCreate

    (2)from1.onShow

    (3)form1.onActivate;

    依次执行。

    2、当窗口创建后

  (1)form1.onCreate不再会执行

  (2)当窗口隐藏后,再显示时from1.onShow执行

  (3)当窗口再显示,但不作为当前窗口,form1.onActivate不执行,当窗口被激活(窗口作为焦点时)form1.onActivate再次执行。

     3、多窗口处于显示状态时

       当指定某窗口作为当前窗口(被激活),也就是窗口之间切换时,当指定为当前窗口(作为焦点被激活)时,该窗口的onActivate被执行一次。

    例如使用,TPageControl嵌入多窗口时,点击PageControl切换窗口时,窗口仅是切换显示,并末激活,onActivate不执行,当鼠标点击到显示的窗口时,它被激活,此时该窗口的onActivate被执行一次。

    三、onActivate实际运用场景

    FormCreate、FormShow、FormActivate事件的运用,前二个非常熟悉。这里仅提示一下FormActivate事件的运用。

     灵活地运用FormActivate事件,可以为用户得到良好的软件体验:

      1、关联性数据的更新

      2、VCL控件的切换(数据随机变更),读取默认值

      例如:TPageControl多窗口,某窗口Combobox控件的选项参数,由“参数”窗口设置。当“参数”窗口修改值后,用户再返回窗口,就会执行一次FormActivate事件,Combobox控件的选项参数就会被自动更新。

FormCreate、FormShow、FormActivate事件的区别与运用_第1张图片

        上图修改“护理区域”的值,返回其它窗口,参数就会更新了。看见下图:

        FormActivate事件代码:

procedure TOld_ON_Frm.FormActivate(Sender: TObject);
var SQL,S:string;
    MyList:TStringList;
begin
  Combobox1.Text:='';
  MyList:=TStringList.Create;
  SQL:='select * from 系统配置 where (分支='+#39+sFCID+#39+') and (主题=''系统'')';
  DataModule1.ClientDataSet1.Active:=False;
  DataModule1.ClientDataSet1.DataRequest(SQL);
  DataModule1.ClientDataSet1.Active:=True;
  with DataModule1.ClientDataSet1 do
  begin
    First;
    While Not Eof do
    begin
      S:=Trim(FieldByName('名称').asString);
      if S='护理区域' then
      begin
        MyList.Text:=FieldByName('Items').asString;
        if MyList.Count>0 then
        begin
          Combobox1.Items:=Mylist;
        end
      end;
      Next;
    end;
  end;
  DataModule1.ClientDataSet1.Active:=False;
  MyList.Free;
end;

      3、多窗口之间数据保持一致

      4、重要的数据需要同步显示时

      5、窗口使用前需要提示时,显示相关信息

      6、窗口激活时出现对话框

     继续......

你可能感兴趣的:(编程技巧,编程环境,常规控件,数据库,delphi,windows)