作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的代码通过单击系统关闭按钮来关闭 MDI 子窗体,它工作正常:
procedure Tfrm_main.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
但是,如果我想使用标准按钮(在子窗体本身内部)关闭 MDI 子窗体,该怎么办?如果我在事件处理程序中调用 Close
,则会收到访问冲突异常。
有没有办法通过使用放置在子窗体本身内部的标准按钮(不是系统关闭按钮)来关闭 MDI 子窗体,而不引发访问冲突异常?
我已经搜索了类似的问题,并尝试了各种代码,但仍然遇到异常。
最佳答案
从同一子窗体的按钮 OnClick
事件内部调用子 MDI 窗体上的 Close()
是完全安全的。在内部,Close()
会触发 OnClose
事件,如果 Action
参数设置为 caFree
,则 Form将对其自身调用Release()
,这是一个延迟操作,在安全时将从内存中释放表单。
下面的代码在 Delphi 7 中对我来说工作得非常好:
unit ChildUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TChildForm = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ChildForm: TChildForm;
implementation
{$R *.dfm}
procedure TChildForm.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
end.
如果您在调用 Close()
时遇到访问冲突,最有可能的原因是您在无效的表单指针上调用 Close()
.
关于delphi - 如何在不使用系统关闭按钮的情况下关闭 MDI 子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800380/
我是一名优秀的程序员,十分优秀!