一个form调用的问题

alexsten 2002-06-19 09:58:14
有三个form:form1,form2,form3,
form1为主窗口,form2和form3是用来动态生成的
现在在form1中点一个button,动态创建form2
点form2的一个button,动态创建form3
在form3中要调用或者修改form2中声明的一个public变量

程序运行出错了,form2和form3都是nil
如何解决?
...全文
83 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
knock 2002-06-19
  • 打赏
  • 举报
回复
在form2和form3中互相调用那是肯定不对的,那会造成循环!
***在unit2的interface部分uses unit3
在unit3的inplementation部分uses unit2***//表示局部引用
这样是可以的。也可以都放在inplementation区。
alexsten 2002-06-19
  • 打赏
  • 举报
回复
to superljj:
试了一下,是可以执行了!

可以说说这是为了什么原因呢?
为什么会出这样的错误呢?
superljj 2002-06-19
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.show;
end;

end.


procedure TForm2.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
Form3.Show;
end;

end.
alexsten 2002-06-19
  • 打赏
  • 举报
回复
to yansea:
有啊,unit3里面有uses unit2
superljj 2002-06-19
  • 打赏
  • 举报
回复
同意楼上.
alexsten 2002-06-19
  • 打赏
  • 举报
回复
在unit2的interface部分uses unit3
在unit3的interface部分uses unit2

编译无法通过
错误:Circular unit reference to "unit2"
yansea 2002-06-19
  • 打赏
  • 举报
回复
unit3 没有use unit2
gxyc76 2002-06-19
  • 打赏
  • 举报
回复
现在在form1中点一个button,动态创建form2
var
myform2 :TForm2;

myform2 :=TForm2.Create(nil);

点form2的一个button,动态创建form3
var
myform3 :TForm3;

myform3 :=TForm3.Create(nil);

在form3中要调用或者修改form2中声明的一个public变量
因为form2与form3要进行单元互调,所以uses unit2,uses unit3必需放在interface部分.


alexsten 2002-06-19
  • 打赏
  • 举报
回复
底下是代码:

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 }
aaa : String;
end;

var
Form1: TForm1;

implementation
uses Unit2,Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
F2:TForm2;

begin
F2:=Tform2.create(nil);
F2.show;
end;

end.


unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
a:String;
end;

var
Form2:Tform2;
implementation

uses Unit1,Unit3;
{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
var
form3:TForm3;
begin
Form3:=TForm3.Create(self);
Form3.Show;
end;

end.


unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm3 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
form2.Edit1.Text := form3.Edit1.text;
form2.a := form3.edit1.text;
end;

end.
yansea 2002-06-19
  • 打赏
  • 举报
回复
你是怎么创建的?如果变量在form的public里声明,可以用form2.变量名引用~~~~~似乎不应该有问题
alexsten 2002-06-19
  • 打赏
  • 举报
回复
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 }
aaa : String;
end;

var
Form1: TForm1;

implementation
uses Unit2,Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
F2:TForm2;

begin
F2:=Tform2.create(nil);
F2.show;
end;

end.




unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
a:String;
end;

var
Form2:Tform2;
implementation

uses Unit1,Unit3;
{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
var
form3:TForm3;
begin
Form3:=TForm3.Create(self);
Form3.Show;
end;

end.




unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm3 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
form2.Edit1.Text := form3.Edit1.text;
form2.a := form3.edit1.text;
end;

end.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧