Forms Delphi XE3窗体打开和关闭
有人能帮我吗 我有中一和中二Forms Delphi XE3窗体打开和关闭,forms,delphi,Forms,Delphi,有人能帮我吗 我有中一和中二 in form1 1 :use form2. in form1 put a button with code Form2.Showmodal; form2 is made invisible form2 has one button: form2.close=工作但不关闭,只是隐藏表单。 -form2.free-访问冲突或关闭,并且form1被冻结(taskmngr将杀死它) 表格2。release-access viololation或closes..如果我单
in form1 1 :use form2.
in form1 put a button with code Form2.Showmodal;
form2 is made invisible
form2 has one button:
- form2.close=工作但不关闭,只是隐藏表单。 -form2.free-访问冲突或关闭,并且form1被冻结(taskmngr将杀死它)
- 表格2。release-access viololation或closes..如果我单击form1上的“打开”按钮重新打开表单,则会导致访问冲突
- Form2.close+onClose动作:=cafree;-访问冲突
- Form2.closemodal-无效
首先,从自动创建中删除表单2
Project > Options > Forms
Remove Form 2 from "Auto-create forms"
这确保不会自动创建此表单
创建它的实例时,不要通过其名称引用它(例如Form2
)。相反,创建一个临时变量。如果要在模态状态下显示,请执行以下操作:
procedure Button1Click(Sender: TObject);
var
F: TForm2;
begin
F:= TForm2.Create(nil);
try
F.ShowModal;
finally
F.Free;
end;
end;
不要用您可能给表单起的任何名字来引用表单,例如Form2
。如果您将它实例化为上面演示的另一个变量(使用F
),那么请确保您对它的所有调用都是通过该变量进行的。事实上,只要从自动创建的表单中删除此表单,就可以完全删除此表单的声明:
var
Form2: TForm2;
如果希望它以非模态状态显示,而主窗体仍然可以访问,则必须以完全不同的方式执行。如果您需要,请告诉我,我会调整我的答案。首先,从自动创建中删除表单2
Project > Options > Forms
Remove Form 2 from "Auto-create forms"
这确保不会自动创建此表单
创建它的实例时,不要通过其名称引用它(例如Form2
)。相反,创建一个临时变量。如果要在模态状态下显示,请执行以下操作:
procedure Button1Click(Sender: TObject);
var
F: TForm2;
begin
F:= TForm2.Create(nil);
try
F.ShowModal;
finally
F.Free;
end;
end;
不要用您可能给表单起的任何名字来引用表单,例如Form2
。如果您将它实例化为上面演示的另一个变量(使用F
),那么请确保您对它的所有调用都是通过该变量进行的。事实上,只要从自动创建的表单中删除此表单,就可以完全删除此表单的声明:
var
Form2: TForm2;
如果希望它以非模态状态显示,而主窗体仍然可以访问,则必须以完全不同的方式执行。如果你需要,请告诉我,我会调整我的答案
form2.close=工作但不关闭,只是隐藏表单
是的,它确实关闭了表单。这就是封闭表单的默认行为——隐藏自身。对于模式窗体,Close()
仅将窗体的ModalResult
设置为非零值,这会导致showmodel()
退出并关闭/隐藏窗体
form2.free-访问冲突或关闭,并且form1被冻结(taskmngr将杀死它)
从属于同一表单的事件处理程序内部释放表单是不安全的。事件处理程序退出后,VCL仍然需要访问表单对象。要安全地释放表单,必须改用Release()
,这会通知表单在以后安全时自动释放自己
表格2。release-access viololation或closes..如果我单击form1上的“打开”按钮重新打开表单,则会导致访问冲突
Release()
导致AV的唯一方法是使用无效的表单指针调用AV。如果重新打开表单导致AV,则代码中存在一些严重错误
Form2.close+onClose动作:=cafree;-访问冲突
caFree
使窗体对自身调用Release()
。见上文
Form2.closemodal-无效
您不应该直接调用CloseModal()
。使用Close()
或设置ModalResult
//this script for showing Form through Button with position
//change position by changing left or top by changing 120 and 300
//in Delphi 10.3 and above
// add form2 unit name in main unit in implementation as uses
form2.close=工作但不关闭,只是隐藏表单
是的,它确实关闭了表单。这就是封闭表单的默认行为——隐藏自身。对于模式窗体,Close()
仅将窗体的ModalResult
设置为非零值,这会导致showmodel()
退出并关闭/隐藏窗体
form2.free-访问冲突或关闭,并且form1被冻结(taskmngr将杀死它)
从属于同一表单的事件处理程序内部释放表单是不安全的。事件处理程序退出后,VCL仍然需要访问表单对象。要安全地释放表单,必须改用Release()
,这会通知表单在以后安全时自动释放自己
表格2。release-access viololation或closes..如果我单击form1上的“打开”按钮重新打开表单,则会导致访问冲突
Release()
导致AV的唯一方法是使用无效的表单指针调用AV。如果重新打开表单导致AV,则代码中存在一些严重错误
Form2.close+onClose动作:=cafree;-访问冲突
caFree
使窗体对自身调用Release()
。见上文
Form2.closemodal-无效
您不应该直接调用CloseModal()
。使用Close()
或设置ModalResult
//this script for showing Form through Button with position
//change position by changing left or top by changing 120 and 300
//in Delphi 10.3 and above
// add form2 unit name in main unit in implementation as uses
//范例
//实施
//使用主;
程序按钮1点击(发送方:ToObject);
变量
F:TForm2;//呼叫或显示所需的形式
开始
F:=TForm2.Create(无);
尝试
F.左:=左+120//所需形状的左位置
F.顶部:=顶部+300//所需表格的顶部位置
F.showmodel;
最后
F.免费;
结束;
结束
//范例
//实施
//使用主;
程序按钮1点击(发送方:ToObject);
变量
F:TForm2;//呼叫或显示所需的形式
开始
F:=TForm2.Create(无);
尝试
F