Delphi TFrame创建/销毁
发布时间:2020-12-15 09:41:46 所属栏目:大数据 来源:网络整理
导读:如何创建(当我想要显示它)并在主TForm上销毁(当我想隐藏它时)帧?
如何创建(当我想要显示它)并在主TForm上销毁(当我想隐藏它时)帧?帧’align = alClient.
我试过这个: 表格: unit main; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,uFrame1,uFrame2; type TFormMain = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } f1: TFrame1; f2: TFrame2; end; var FormMain: TFormMain; implementation {$R *.dfm} procedure TFormMain.FormCreate(Sender: TObject); begin f1 := TFrame1.Create(Self); f1.Parent := Self; end; end. 第一帧: unit uFrame1; interface uses Windows,StdCtrls; type TFrame1 = class(TFrame) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} uses main,uFrame2; procedure TFrame1.btn1Click(Sender: TObject); begin Self.Free; FormMain.f2 := TFrame2.Create(FormMain); FormMain.f2.Parent := FormMain; end; end. 第二帧: unit uFrame2; interface uses Windows,StdCtrls; type TFrame2 = class(TFrame) lbl1: TLabel; btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} uses main,uFrame1; procedure TFrame2.btn1Click(Sender: TObject); begin Self.Free; FormMain.f1 := TFrame1.Create(FormMain); FormMain.f1.Parent := FormMain; end; end. 但是当我单击FrameStart或Frame1上的按钮时,它会与访问vialataions崩溃(TForm FormCreate工作正常,即它创建并显示FrameStart). 德尔福7. 解决方法
您无法在这些事件处理程序中调用Self.Free.当事件处理程序返回时,下一个执行的VCL代码仍然使用对刚刚释放的对象的引用.这就是访问违规的来源.如果您在完全调试模式下使用FastMM运行,那么您将看到一条有用的诊断消息.
这些帧必须以更迂回的方式自杀.将CM_RELEASE消息发布到帧,要求它在帧上调用Free.您发布消息而不是发送消息,以便首先处理所有正在进行的消息.您需要向帧添加消息处理程序以响应消息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |