在写代码的时候,我们有时候会在A窗体中用到了B窗体,而B窗体又可能反过来引用A窗体中的对象,此时如果处理不好就会在窗体释放的时候,对象会报内部例外的错误。这时我们可以用另一种方式去处理这种问题:
如果A窗体中用到了B窗体,我们就要尽量不要再去B窗体中反过来引用A的东东。
这时我们可以把B窗体中要用到的对象另外封装成一个类,然后定义一个此类的一个全局变量,然后定义一个创建此对象的函数,这样我们就可以在B窗体中去用了,而在A窗体中则只要调用函数就可以了。具体代码如下:
定义类
TDefineProvider = class(TComponent)
private
FDataSetDefine: TDataSet;
procedure WMLogout(var Msg: TMessage); message WM_Logout;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property DataSetDefine: TDataSet read FDataSetDefine;
end;
定义私有的全局变量
var
gDefineProvider: TDefineProvider;
函数实现对象的创建
function GetDefineDataSet: TDataSet;
begin
if gDefineProvider = nil then
gDefineProvider := TDefineProvider.Create(nil);
Result := gDefineProvider.DataSetDefine;
end;
initialization
释放对象
finalization
if gDefineProvider <> nil then
gDefineProvider.Free;