首页 > 其他分享 >delphi cannot make a visible window modal报错的解决过程

delphi cannot make a visible window modal报错的解决过程

时间:2023-05-09 10:57:16浏览次数:71  
标签:delphi 基类 AOwner visible 窗体 inherited 报错 Create 构造函数

抛出问题:

 排除过程:

1.在TFrmChangePW窗口的create事件里打断点,结果发现,根本没停顿,所以判断问题不在TFrmChangePW窗体里,而是showmodal这语句里出了问题,点中断,跳到抛出错误的地方:

2.if 里的四个条件,检查了第一个,第二个和第四个都是没问题的,第三个(fsModal in FFormState) 不是很了解,百度了下,发现它是判断当前窗体是否正以模态方式展示,如果是则抛出异常提示无法再次以模态方式展示,避免出现多个模态窗体的情况。

FFormStateTCustomForm 类的一个属性,表示窗体当前的状态,是一个集合类型,包括以下几个元素:

  • fsCreating:窗体正在创建中。
  • fsShowing:窗体正在展示中。
  • fsModal:窗体正在以模态方式展示。
  • fsActivated:窗体已经被激活。

3.结合出错提示,怀疑是三个条件的问题,于是在frm.showModal之前判断一下 fsmodal in frm.FormState,结果返回flase...这就很尴尬了...四个条件都没满足抛错条件,为什么会出错呢?

4.检查到 Frm: TFrmChangePW 这个窗体是继承自 TFrmChangePW = class(TFrmGPBase) ,再看看自己的构造函数:

constructor TFrmChangePW.Create(AOwner: TComponent);
begin
  inherited;
  FChangeHeadImage := false;
  FErrTime := 0;
end;

好像明白了点什么!把  inherited; 改成 inherited Create(AOwner); 问题解决了....

在 Delphi 的构造函数中,如果窗体继承自其他基类窗体,在构造函数中使用 inheritedinherited Create(AOwner) 是有区别的。 inherited 表示调用父类的默认构造函数,而 inherited Create(AOwner) 表示调用父类的构造函数,并且传入一个参数 AOwner。 如果基类窗体有自己的构造函数,并且需要传入参数进行初始化,那么就需要使用 inherited Create(AOwner) 调用基类构造函数,并且传入相应的参数。如果基类窗体没有自己的构造函数,只有默认构造函数,那么使用 inheritedinherited Create(AOwner) 的效果是一样的。很不巧,我的基类窗体中就是有自己的构造函数,所以出错了

 

标签:delphi,基类,AOwner,visible,窗体,inherited,报错,Create,构造函数
From: https://www.cnblogs.com/yoooos/p/17381452.html

相关文章

  • ZLMediaKit报错,程序启动失败,请修改配置文件中端口号后重试!
    报错信息如下:2023-05-0910:33:22.819W[MediaServer][13423-MediaServer]sockutil.cpp:421bind_sock6|Bindsocketfailed:addressalreadyinuse2023-05-0910:33:22.819W[MediaServer][13423-MediaServer]main.cpp:366start_main|端口占用或无权限:Listenon:......
  • HBuilderX启动微信开发者工具报错[error] Error: Fail to open IDE
    报错提示如下: 解决方法:1.使用自己的账号登录。2.在微信开发者平台上申请appid并更改项目中的appid。3.删除项目中微信小程序的appid,这样就能在HBuilderX中启动游客身份的微信开发者工具。  检查其他步骤是否正确:1.打开微信开发者工具,在安全选项里开启服务端口......
  • OpenGL学习笔记-3:编译shader报错: cannot convert from 'const highp float' to 'Frag
    报错信息: ERROR::SHADER_COMPILATION_ERRORoftype:FRAGMENTERROR:0:10:'assign':cannotconvertfrom'consthighpfloat'to'FragUserData4-componentvectorofhighpfloat'-------------------------------------------------......
  • 关于使用kubeadm reset命令对kubeadm init与kubeadm join操作后遇到报错的情况-进行恢
    在Kubernetes/k8s集群中,无论是在开始的master节点初始化,还是后面客户端使用kubeadmjoin命令加入到集群可能都会遇到很多报错,对于新手来说、很多还不是很好解决、也有一些情况,是在初始化之前忘记执行一些操作,而导致报错这种一般都需要执行漏掉的操作,重新执行初始化操作,但是如......
  • 使用 Ef core 时 报错Data is Null. This method or property cannot be called on
    1.问题在使用EFcore做查询操作的时候报错"DataisNull.ThismethodorpropertycannotbecalledonNullvalues.”"2.解决这是数据库中的某个属性为空导致,即使这个属性srting类型,也需要将字段标记为可空的......
  • Delphi工具开发的windows应用程序,自动化测试工具
    DUnit:DUnit是一种单元测试框架,可以帮助开发人员编写单元测试用例,测试Delphi应用程序的各个模块和组件。TestComplete:一个功能强大的自动化测试工具。可以对Delphi应用程序进行测试,支持多种脚本语言和测试框架,如JScript、VBScript、Python、JUnit等DelphiAutomatedTestingSui......
  • lrzsz安装一直报错,只能下载好包编译安装
    1、下载lrzsz安装包https://www.ohse.de/uwe/software/lrzsz.html下载安装包lrzsz-0.12.20.tar.gz2、在linux下安装lrzsz把lrzsz-0.12.20.tar.gz复制到linux环境中去(任何目录都可以)tarzxvflrzsz-0.12.20.tar.gzcdlrzsz-0.12.20使用sudo分开执行以下三条命令(需要输入密码)sud......
  • debain11安装mysql报错一例
    W:GPGerror:http://repo.mysql.com/apt/debianbullseyeInRelease:Thefollowingsignaturescouldn'tbeverifiedbecausethepublickeyisnotavailable:NO_PUBKEY467B942D3A79BD29E:Therepository'http://repo.mysql.com/apt/debianbullseyeInRe......
  • Delphi取整函数
     UsesMathfloor和ceil是mathunit里的函数,使用前要先UsesMath。trunc和round是systemunit里的函数,缺省就可以用。floor直接往小的取,比如floor(-123.55)=-124,floor(123.55)=123trunc直接切下整数,比如trunc(-123.55)=-123,floor(123.55)=123ceil直接往大的取......
  • workerman下框架gateway报错 worker[thinkphp:30776] exit with status 64000
    wokerman启动之后一直报错Worker[30477]processterminatedworker[thinkphp:30477]exitwithstatus64000Worker[30533]processterminatedworker[thinkphp:30533]exitwithstatus64000Worker[30571]processterminatedworker[thinkphp:30571]exitwithstatus64......