如何访问新建窗体(100分)

C

ccf

Unregistered / Unconfirmed
GUEST, unregistred user!
在运行时建立一个窗体后,访问该窗体时报错。主要是不知如何访问新建窗体,与之交换
数据,还有“Create(Aowner:TComponent)“中的Aowner如何使用。例如:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);//用于建立一个新窗口。
procedure Button2Click(Sender: TObject);//用于在这个新窗口显示一个字符串
procedure show(s:string);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses
unit2;
{$R *.DFM}
procedure tform1.show(s:string);
begin
form1.edit1.text:=s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
form2:tform2;
begin
form2:=tform2.create(self);
form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.display(edit1.text);
end;

end.

******************************

unit Unit2;

interface

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

type
TForm2 = class(TForm)
Edit1: TEdit;
procedure display(s:string);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation
uses
unit1;
{$R *.DFM}

procedure tform2.display(s:string);
begin
form2.edit1.text:=s;
end;

end.
*******************************
 
你的 form2 的 edit 在 create 中创建了吗?
 
procedure TForm1.Button1Click(Sender: TObject);
var
form2:tform2
<--- 毛病在这里。
begin
form2:=tform2.create(self);
form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.display(edit1.text);
end;

:你把form2定义为局部变量了。
 
to Croco
但是应该编译就通不过呀,
 
Croco完全正确。
 
编译时可以通过:
unit Unit2;
var
Form2: TForm2;
定义了Form2。
 
哈哈,疏忽。
 
应该这样说,Button1Click建立的是这个事件处理程序内部的
变量form2,而Button2Click使用的是全局的变量form2,这个
全局的还没有建立!这叫什么来着,对了,作用域的孔洞效应!
不知各位还记不记得?
 
interface

uses unit1;

implemetation

uses unit2;
 
又何必那么麻烦呢
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,unit1;

procedure TForm2.FormClose(Sender: TObject
var Action: TCloseAction);
begin
action:=cafree;
end;




unit1:

var
Form1: TForm1;

implementation
uses unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
with form2 do
begin
。。。。。
end;
end;

dpr:
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

 
to croco:
'var
form2:tform2'
有和没有都无所谓,问题不在这.
to ccf:单步调试时,具体的断点是哪,以及调试时的具体信息,就可以了.
将procedure show(s:string),procedure display(s:string)放
在private中试试.
 
多人接受答案了。
 
顶部