访问TWinControl.TForm上的句柄.创建



我有这个代码:

procedure TForm1.FormCreate(Sender: TObject);
begin
DoSomethingWithCombobox(ComboBox1.Handle);
end;

Q: 是否保证始终在TForm.FormCreate上创建ComboBox1.Handle(Form1是ComboBox1的父级)?也许在OnFormShow上?从我的测试来看,Handle在这一点上总是可用的。

我知道ComboBox1.Handle此时将调用HandleNeeded。但我能假设Handle在这一点上总是可用的吗?

我还知道TWincontrol可以安全地访问它自己在CreateWnd上的句柄。我的问题特定于这样一种情况,即我无法控制子控件的CreateWnd,只能访问父事件/消息。

希望我的问题很清楚。

如果你的测试表明可以访问那里的控件句柄,那么它应该是可以的。你是应用程序开发人员,所以如果你后来更改了任何东西来打破这种假设,你也有能力修复它。

访问控件的Handle属性将产生有效的窗口句柄或引发异常。你不会得到一个null句柄。当控件的父窗口无法存在时,通常会出现异常。

此时获得的句柄不能保证是控件的最后一个句柄,因为控件的底层窗口可能会被重新创建,但由于您是应用程序开发人员(而不是组件库开发人员),您可以合理地控制窗体创建完成后重新创建窗口的频率。这是因为您正在处理OnCreate事件。例如,如果您一直在重写Loaded方法,那么就不太相信所有窗口创建活动都已完成。

最新更新