1

我最近在调试一个复杂的错误。它是由访问不存在的Form.Handle(垃圾指针)引起的。对我来说,这个错误以一种相当出乎意料的方式暴露出来——访问表单会Handle导致调整大小和重绘。

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

问题

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

property Handle: Integer read FHandle;

, 但是是吸气剂

property Handle: Integer read GetHandle;

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

4

1 回答 1

9

即使底层操作系统窗口不存在,表单对象也可以存在。在那些时候,该字段将为 0,这对于需要有效窗口句柄的代码没有帮助。为确保每次需要时都能获得有效句柄,您需要在引用该字段之前致电。作为带有 getter 的属性,该属性可以自动为您调用,从而更容易使用该属性。HandleHandleNeededHandleHandleNeededHandle

于 2016-06-03T12:33:52.783 回答