选项卡上缺少UI控件,为什么调用HandleNeeded会修复它?

时间:2010-01-15 07:34:41

标签: delphi

我有一个UI对象附加到一个选项卡上,只有在与程序的某个交互序列下才会丢失,如果它丢失了,关闭程序将导致AV和无效窗口句柄错误。 当我试图找出原因时,我发现在开始时调用它的.Handle或.HandleNeeded将解决问题。但这并不能解决为什么它能解决这个问题。

所以我希望知道这是常见的吗?有没有人遇到过这个奇怪的虫子?知道原因吗?

2 个答案:

答案 0 :(得分:3)

如果您正在使用TabControl,Delphi只在需要页面时为每个页面创建控件(出于速度和资源使用的原因)。尝试访问未显示的页面上的控件会导致问题,除非您调用.HandleNeeded。对.HandleNeeded的调用告诉Delphi你现在需要处理,并消除了这个问题。

这不是一个错误,BTW。如上所述,这是一个有意的设计决策,用于速度和资源使用的最小化。

答案 1 :(得分:2)

如果在运行时创建控件:确保已设置组件的父级和所有者!