精易论坛

标题: 指定窗口或窗口组件不存在或尚未载入 [打印本页]

作者: adssdsadssdsdsa    时间: 2025-5-20 14:54
标题: 指定窗口或窗口组件不存在或尚未载入
在【窗口创建完毕】的事件里写了个带【XX.取窗口句柄】的代码,在W7正常,
到了W10就会偶尔出现 指定窗口或窗口组件不存在或尚未载入

而且不是每次出现,是【偶尔】就很奇葩。


窗口创建完毕后组件应该都已经有了但为啥会提示不存在?


补充内容 (2025-5-20 14:57):
但在W10里的调试状态就正常

补充内容 (2025-5-20 15:01):
同样的代码在上个版本就没问题,但我也不记得有针对这块的代码做过修改

补充内容 (2025-5-20 16:00):
代码附在了 16 楼,单独剥出来正常,但留在源程序里就这么一段直接崩溃。

补充内容 (2025-5-20 16:58):
解决了! 缘来是我用错了内存哈希表的模块导致!换回旧的就行了。
作者: 萌新来学习    时间: 2025-5-20 14:54
adssdsadssdsdsa 发表于 2025-5-20 21:12
感谢热心解惑!已经解决了,是我换了个哈希表模块的问题。命令是一样的但实际代码不同导致的异常。 ...

不客气,共同谈论,一起进步,建立论坛良好氛围
作者: aipca    时间: 2025-5-20 14:55
附上代码……
作者: adssdsadssdsdsa    时间: 2025-5-20 14:58
aipca 发表于 2025-5-20 14:55
附上代码……

没法附代码,单独剥出来又正常。太奇葩了。
作者: 萌新来学习    时间: 2025-5-20 14:58
加个程序_延时(1000,),延时1秒试试

补充内容 (2025-5-20 14:59):
是不是程序运行太快了,导致这个情况呢
作者: 萌新来学习    时间: 2025-5-20 14:59
adssdsadssdsdsa 发表于 2025-5-20 14:58
没法附代码,单独剥出来又正常。太奇葩了。

那可能是前置条件出现逻辑漏洞了

补充内容 (2025-5-20 15:02):
对了,没有载入的窗口在win10中找不到句柄,我调试时也找不到句柄,正常的,只有使用载入()命令后,显示出来才会找到

作者: adssdsadssdsdsa    时间: 2025-5-20 15:01
萌新来学习 发表于 2025-5-20 14:58
加个程序_延时(1000,),延时1秒试试

补充内容 (2025-5-20 14:59):

也有试过,单独搞了个线程 + 延时。还是出错。
作者: adssdsadssdsdsa    时间: 2025-5-20 15:04
萌新来学习 发表于 2025-5-20 14:59
那可能是前置条件出现逻辑漏洞了

补充内容 (2025-5-20 15:02):

我这边反着,调试状态下稳定运行。编译出来出错。
作者: 萌新来学习    时间: 2025-5-20 15:05
adssdsadssdsdsa 发表于 2025-5-20 15:01
也有试过,单独搞了个线程 + 延时。还是出错。

不,你要把它载入出来,不想看到它可以这样:_启动窗口.可视 = 假

补充内容 (2025-5-20 15:06):
跟搞线程没关系,应该是执行逻辑上错误了

补充内容 (2025-5-20 15:11):
在窗口被载入后的窗口创建完毕子程序中:句柄 = 控件名.取窗口句柄(),如果还是不行,用安全软件的悬浮窗看看你的电脑内存情况
作者: adssdsadssdsdsa    时间: 2025-5-20 15:09
萌新来学习 发表于 2025-5-20 15:05
不,你要把它载入出来,不想看到它可以这样:_启动窗口.可视 = 假

补充内容 (2025-5-20 15:06):

更奇葩的现象出现了,我把这段出错的代码删掉后。它又因为别的情况崩掉了。
但是 一样的代码,上个版本里就正常。
作者: 萌新来学习    时间: 2025-5-20 15:13
附图说话

控件取句柄.png (21.19 KB, 下载次数: 0)

控件取句柄.png

作者: 萌新来学习    时间: 2025-5-20 15:14
adssdsadssdsdsa 发表于 2025-5-20 15:09
更奇葩的现象出现了,我把这段出错的代码删掉后。它又因为别的情况崩掉了。
但是 一样的代码, ...

建议发一下源码,不了解全部内容,不好判断
作者: 萌新来学习    时间: 2025-5-20 15:18
你要取的是外部程序控件的句柄,还是自身程序的控件句柄呀
作者: adssdsadssdsdsa    时间: 2025-5-20 15:18
萌新来学习 发表于 2025-5-20 15:14
建议发一下源码,不了解全部内容,不好判断

OK啊,我在缩小出错范围。
作者: 萌新来学习    时间: 2025-5-20 15:20
adssdsadssdsdsa 发表于 2025-5-20 15:18
OK啊,我在缩小出错范围。

这样做法是对的,通过不断的输出调试,找到逻辑出错的环节,因为程序能跑起来是一回事,逻辑正确又是一回事
作者: 古道清风    时间: 2025-5-20 15:22
我前两天刚解决完这个问题,如果没有方法的话,抓破脑袋你都找不到,现在把方法和可能问题分享给你,避免你像我一样困扰很久:
原因分析:通常是因为在线程中或者循环中,调用了某个窗口组件,需要修改窗口组件属性,比如我就是在循环中修改一个按钮的名称,但是循环中又加了一个程序延时,导致最终窗口销毁后,循环代码仍在运行。
组件定位:报错时,认真记录下报错窗口的两组数字;然后打开易语言-运行-到运行时错误相关位置,可以精准定位到错误组件,然后在全部搜索这个组件存在的代码,组个排查,解决问题即可。不需要附上代码,有帮助请选中,祝你的代码永无BUG!~
作者: adssdsadssdsdsa    时间: 2025-5-20 15:52
萌新来学习 发表于 2025-5-20 15:20
这样做法是对的,通过不断的输出调试,找到逻辑出错的环节,因为程序能跑起来是一回事,逻辑正确又是一回 ...



作者: adssdsadssdsdsa    时间: 2025-5-20 15:53
古道清风 发表于 2025-5-20 15:22
我前两天刚解决完这个问题,如果没有方法的话,抓破脑袋你都找不到,现在把方法和可能问题分享给你,避免你 ...

感谢祝福!我把代码附在 16 楼了。单独搞出来运行正常,但搁原程序里就崩溃。
作者: adssdsadssdsdsa    时间: 2025-5-20 15:53
萌新来学习 发表于 2025-5-20 15:20
这样做法是对的,通过不断的输出调试,找到逻辑出错的环节,因为程序能跑起来是一回事,逻辑正确又是一回 ...

我把代码附出来了!单独剥出来正常 但在原程序里就崩溃。头都大了。
作者: adssdsadssdsdsa    时间: 2025-5-20 15:56
aipca 发表于 2025-5-20 14:55
附上代码……

我把代码附在 16 楼了,单独剥出来正常,但在原程序里就崩溃。
作者: adssdsadssdsdsa    时间: 2025-5-20 15:59
古道清风 发表于 2025-5-20 15:22
我前两天刚解决完这个问题,如果没有方法的话,抓破脑袋你都找不到,现在把方法和可能问题分享给你,避免你 ...

通过那俩数字定位它会跳到窗口组件处(超级按钮那)这个倒是能确定,但不晓得崩溃缘故。
作者: 古道清风    时间: 2025-5-20 16:02
adssdsadssdsdsa 发表于 2025-5-20 15:59
通过那俩数字定位它会跳到窗口组件处(超级按钮那)这个倒是能确定,但不晓得崩溃缘故。 ...

右键,全部搜索,超级按钮,看哪些代码修改了这个按钮的属性,然后判断是否存在窗口销毁后,这段代码仍未执行完毕的情况。
作者: 古道清风    时间: 2025-5-20 16:03
adssdsadssdsdsa 发表于 2025-5-20 15:53
感谢祝福!我把代码附在 16 楼了。单独搞出来运行正常,但搁原程序里就崩溃。 ...

你这代码不全,肯定是还有别的地方调用了这个超级按钮。你这样剥离出来,不利于问题解决。不要怀疑组件本身,永远先怀疑自己的代码逻辑。
作者: adssdsadssdsdsa    时间: 2025-5-20 16:06
古道清风 发表于 2025-5-20 16:03
你这代码不全,肯定是还有别的地方调用了这个超级按钮。你这样剥离出来,不利于问题解决。不要怀疑组件本 ...

当真只调用了这么点代码,1. 载入窗口,2. 在窗口创建完毕的事件里取超级按钮的句柄,结果【超级按钮不存在】
作者: aipca    时间: 2025-5-20 16:07
adssdsadssdsdsa 发表于 2025-5-20 15:53
感谢祝福!我把代码附在 16 楼了。单独搞出来运行正常,但搁原程序里就崩溃。 ...

在易语言上面的工具栏运行里,找到最后一栏“到运行时错误相关位置”然后把你这弹窗出错的两个数值填写进去确定
1375797251和369216144
作者: adssdsadssdsdsa    时间: 2025-5-20 16:08
aipca 发表于 2025-5-20 16:07
在易语言上面的工具栏运行里,找到最后一栏“到运行时错误相关位置”然后把你这弹窗出错的两个数值填写进 ...

这个也有看过,它转跳到窗口里定位在超级按钮。我也是能确定是它不存在导致,但不应该不存在呀。
窗口已经创建完毕了都。

补充内容 (2025-5-20 16:09):
我打算放大招了,把程序里所有其它代码删掉只留下这么一段。

补充内容 (2025-5-20 16:14):
大招放完了,删掉其它所有代码后倒是一切都正常了。
作者: 萌新来学习    时间: 2025-5-20 19:44
adssdsadssdsdsa 发表于 2025-5-20 15:53
我把代码附出来了!单独剥出来正常 但在原程序里就崩溃。头都大了。

之前出门去了,刚回来,还没解决呀

作者: 萌新来学习    时间: 2025-5-20 19:48
adssdsadssdsdsa 发表于 2025-5-20 15:52

怎么这么多组件?内存占用看了没有?
作者: 萌新来学习    时间: 2025-5-20 19:54
adssdsadssdsdsa 发表于 2025-5-20 15:56
我把代码附在 16 楼了,单独剥出来正常,但在原程序里就崩溃。

看我留言板,加我QQ
作者: adssdsadssdsdsa    时间: 2025-5-20 21:12
萌新来学习 发表于 2025-5-20 19:54
看我留言板,加我QQ

感谢热心解惑!已经解决了,是我换了个哈希表模块的问题。命令是一样的但实际代码不同导致的异常。
作者: Ruang    时间: 2025-5-21 11:17
你这是复制组件吗?




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4