Delphi开发中如何引用当前代码所属Form实例而非全局根Form?
问题原因
该问题由Delphi的默认全局Form变量机制导致:当你通过IDE创建TTestForm窗体类时,会自动生成一个和类名对应的全局变量TestForm,你直接调用TestForm.Caption时,访问的始终是这个全局变量指向的实例,自然不会作用到你手动创建的其他实例上。
解决方法
在窗体类的内部代码中,直接使用Self关键字即可引用当前代码执行所在的实例,不需要依赖任何全局变量:
// 写在TTestForm类的内部方法中即可 Self.Caption := 'Test'; // 也可以直接省略Self,直接访问类的成员属性,效果完全一致 Caption := 'Test';
额外注意点
- 如果不需要默认创建的全局
TestForm实例,可以到项目选项的「自动创建窗体」列表里把TTestForm移到「可用窗体」列表,避免全局变量默认指向多余的实例,也能减少不必要的启动资源占用 - 你手动创建的窗体实例已经指定了Application作为Owner,程序退出时会自动释放,不需要额外手动处理内存
内容的提问来源于stack exchange,提问作者Codrut
相关产品推荐
相关产品推荐

