一个小问题,请大家不吝赐教(100)!(100分)

  • 主题发起人 主题发起人 xhhua
  • 开始时间 开始时间
X

xhhua

Unregistered / Unconfirmed
GUEST, unregistred user!
现有三个form: form1,form2,form3
form1是自动创建,form2由form1创建,form3由form2创建,
比如form1中use form2, 再form2:=Tform2.create(self)
再form2.showmodal,
form3也如此由form2创建,
但是在form3中却不能访问form2中的控件。
如form2中有一label1,form3中用label1.caption:=form2.label1.caption;
会产生EAccessViolation异常 ,
如果form2中有一个table1,则form3中的数据感知控件可得到form2中的table1中
的数据,但是也访问不到table1的属性及方法,
否则产生EAccessViolation异常.
错误提示好象是访问了非法内存,但我form2是
存在的并没有关闭。
请问这是什么原因,如何解决。
如果我在project->options->forms中,把form2从 Availabel forms 移到 Auto-create forms
中就不会存在异常,也即把form2改为是自动创建的表单,就 OK 了。但我不想form2自动创建。
这是什么原因,好象form3.showmodal之后form2就被关闭,
不知你们遇到过这种情况没有,或者试试看会不会。
 
呵呵,是不能修改别的窗体里的控件属性,我也想知道
 
1:看看你是不是在Form2 Create之前,就引用了里面的内容?
2:ModalResult好像有传递性,你在Form3的Close之中,马上把Form3.ModalResult:=mrNone即可。
 

在implementation
后面写

form3中
uses Unit2;
类似form1和form2中也这么写
 
Agree Kingron
不用ShowModal即可。
 
好象都不是他们说的情况,
还有没有人来回答这个问题,
这个问题是不是有点难。
 
你创建时有没有Create呀?
 
我试了一下,这样的代码没有问题。看看3个form的代码


var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=tform2.create(self);
form2.showmodal;
form2.free;
end;



var
Form2: TForm2;

implementation

uses Unit3;

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin
form3:=tform3.create(self);
form3.showmodal;
form3.free;
end;



var
Form3: TForm3;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm3.Button1Click(Sender: TObject);
begin
button1.Caption:=form2.button1.caption;
end;

 
谢谢大家:
原来我在创建表单之前都申明了变量,如下:
procedure TForm1.Button1Click(Sender: TObject);
var
form2: tform2;
begin
form2:=tform2.create(self);
form2.showmodal;
form2.free;
end

请问 Brave:
有变量申明和没有变量申明,有什么区别? 谢谢!
 
哈哈,我明白了,你声明的变量是局部变量,只在button单击的事件中有效,
程序执行完该过程(事件)后,就会将局部变量释放,所以。。。。。。。
原来如此,可以吗?嘻嘻 :)
 
知道了,谢谢大家,谢谢Brave.
 
后退
顶部