sse*_*sse 2 delphi parent owner custom-component
我们有一些覆盖createwnd的旧版delphi自定义组件.这些组件位于表单内的面板上.
当表单和面板被实例化时,组件也被实例化,并且createwnd被调用一次.这是有道理的.
我很惊讶地发现,如果我在运行时切换面板的父节点,则会再次调用createwnd.
例如,在某些情况下,我可能会将Panel1的父容器更改为Form2.panel2.基本上在运行时在Form2的面板中绘制Panel1.
TForm1.buttonclick(..)
begin
..
Panel1.parent := Form2.panel2;
..
end;
Run Code Online (Sandbox Code Playgroud)
当父级更改时,为什么要重新创建Panel1中的自定义组件?
并且Panel1中的所有组件的行为都是相同的,即使是非自定义的组件,例如,如果我在Panel1上也有TButton,那么当父母切换时也会重新创建吗?我不认为这样做,这就是为什么我这么惊讶.
最后,如果此行为不正确,我该如何进行,以便在父容器更改时不会调用createwnd.
谢谢!
面板内的所有控制器都会TWinControl重新创建窗口句柄,以及面板的窗口句柄(原因是相反).
如果你的代码每个程序的生命周期只需要调用一次,那么CreateWnd它就不是正确的地方.请尝试构造函数.
此外,将面板从一种形式替换为另一种形式可能会混淆面板的所有权,并可能导致意外行为甚至错误.请参阅:如何分离面板并在单独的窗口中显示它?
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |