在桌面中心定位表单时出现异常

时间:2015-07-15 16:56:25

标签: delphi delphi-2009

我的主窗体使用WindowState作为wsMaximized和Position作为poDefault启动。当我点击最大化/最小化切换按钮时,我希望将缩小的表单放在桌面中心。所以在OnResize中我放置了以下内容:

if WindowState = wsMaximized then
    Position := poDefault
 else if WindowState = wsNormal then
    Position := poScreenCenter;

当我的程序启动时,我得到以下异常:'无法在OnShow或OnHide中更改可见。

我应该怎么做才能使我的表格最大化或正常并居中?

1 个答案:

答案 0 :(得分:4)

FormResize方法在您的表单第一次显示时发生。您必须检查表单的当前状态,并且在第一次创建或显示时不要尝试调整其大小

procedure TForm1.FormResize(Sender: TObject);
begin
    if not(fsVisible in Self.FormState) then
      Exit;

    if WindowState = wsMaximized then
      Position := poDefault
    else
      if WindowState = wsNormal then
        Position := poScreenCenter;
end;

http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TFormState

了解详情

下表列出了表单状态中可包含的值:

  

价值含义

     

fsCreating - 表单的构造函数是当前的   执行。

     

fsVisible - 窗体的窗口可见。这个状态是   用于更新Visible属性。

     

fsShowing - 表单的WindowState属性正在改变。此状态用于防止WindowState更改干扰正在进行的转换。

     

fsModal - 表单创建为模式窗口。

     

fsActivated - 表单已获得焦点或应用程序变为活动状态但尚未调用Activate方法来生成OnActivate事件。