我的项目中有2个Form(Form1和Form2),Form1是自动创建表单,但Form2是可用表单.我怎么能创建Form2并卸载Form1?
我在此代码中收到"访问验证"错误.
这是Form1代码:
1. uses Unit2;
//*********
2. procedure TForm1.FormCreate(Sender: TObject);
3. var a:TForm2;
4. begin
5. a := TForm2.Create(self);
6. a.Show;
7. self.free; // Or self.destory;
8. end;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我将"Serg"代码修改为:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Release;
end;
end.
Run Code Online (Sandbox Code Playgroud)
///
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Form1:= TForm1.Create(Application);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
但是这个项目开始然后自动退出,为什么?我想显示Form1,当我们单击Button1然后显示Form2和免费(Release)Form1.我怎么能这个?
Too*_*the 12
当您销毁表单时,最好使用Release.
版本与免费版本几乎相同,但它会等待待处理的消息以避免崩溃.
你永远不应该使用Destroy.Free/Release调用析构函数.
Self是当前对象(在你的代码Form1中,所以self.Free杀死了当前的表单.这导致访问冲突.Form1是自动创建的,它也被自动销毁,所以你不应该自己销毁它.如果你不想要它,隐藏它.
如果您想稍后处理它,您应该保留对新创建的表单的引用.
您修改后的代码应该是:
uses Unit2;
TForm1 = class (TForm)
private
FChild : TForm2;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FChild := TForm2.Create(nil);
Hide; // Hides form 1
FChild.Show;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
FChild.Release;
end;
Run Code Online (Sandbox Code Playgroud)
但是为什么要在创建第一个表单的表单中创建另一个表单.为什么不完全删除第一个表单而只使用第二个表单(自动创建)?
| 归档时间: |
|
| 查看次数: |
15901 次 |
| 最近记录: |