gpt4 book ai didi

delphi - 为什么 TForm.Handle 是 getter 而不是字段?

转载 作者:行者123 更新时间:2023-12-03 03:47:33 26 4
gpt4 key购买 nike

我最近正在调试一个复杂的错误。这是由于访问不存在的 Form.Handle (垃圾指针)引起的。该错误以一种令我意想不到的方式暴露出来 - 访问 Forms Handle 导致调整大小和重新绘制。

我希望通过垃圾指针访问Form.Handle只会返回一些垃圾THandle。期望 Handle 在表单创建时创建一次,并保持不变,直到表单被销毁。

问题

为什么会这样,TForm.Handle 不是在表单创建时初始化并通过访问的字段

property Handle: Integer read FHandle;

,但是是一个 setter/getter

property Handle: Integer read GetHandle;

在第一次访问时创建句柄甚至窗口 (CreateWnd)?

最佳答案

即使底层操作系统窗口不存在,表单对象也可以存在。在此期间,Handle 字段将为 0,这对于需要有效窗口句柄的代码没有帮助。为了确保每次需要时都能获得有效的句柄,您需要在引用 Handle 字段之前调用 HandleNeeded。作为带有 getter 的属性,该属性可以自动为您调用 HandleNeeded,从而更轻松地使用 Handle 属性。

关于delphi - 为什么 TForm.Handle 是 getter 而不是字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37614161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com