豁出去啦。100分求教一个窗体引用的问题?(100分)

  • 主题发起人 主题发起人 super12345
  • 开始时间 开始时间
S

super12345

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗体mainform是一个fsMDIForm调用一个fsMDIChildForm的子窗体form1
在这个子窗体调用一个fsNormal的窗体form2
在mainform中用以下语句调用form1
if not Assignedform1) then
Application.CreateForm(Tform1, form1);
form1.Show;
窗体form1:
我在form1中设置一个DBEdit1和Btn1的控件
implementation
uses form2;
btn1的执行语句
if form2 = nil then
Application.CreateForm(Tform2,form2);
form2.Show;
在窗体form2中放置一个Btn1和一个Edit1的控件
implementation
uses form1;
Btn1的语句是
Edit1.Text:=form1.DbEdit1.Text;
运行到Showmessage(form1.edit1.text)时出现以下错误
Access violation at address 005FB3C7 in module 'Soft.exe'.
Read of address 00000360.
但如果我在form1的Btn改成如下就不会出错。
Application.CreateForm(TForm2, Form2);
if Form2.ShowModal = mrok then
begin
DbEdit1.Text:=Form2.Edit1.Text;
end;
这是为什么?由于程序的需要就是要用第一种方法,哪位高手指点,分不够再给啊。
 
是不是form1和form2 相互引用的问题呢
 
Form2对象不存在导致
 
我做了一个完全没有问题。。。。
按照你说的。。完全通过,怎么也不出现访问错误问题。
Form2是不是丢失了。
我就改了一点。
if not Assigned(form1) then
begin
Application.CreateForm(TForm1,Form1);
form1.Show;
end;
不过这个应该影响什么。。你重新试试,估计你的代码问题不在这里。。。
 
理论是应该没有问题的。可能那里出错了。比如属性
 
我也试过了了,没有问题。
 
Edit1.Text:=form1.DbEdit1.Text;
楼主会跟踪么! 跟到这里看看是那个对象为nil了. 再查原因啊
 
在form1 中
是在
interface
{$I DEFINE.INC}
uses form2

在form2定义
function Edit: Boolean; override;
function Tform2.Edit: Boolean;
begin
Result := ShowModal = mrOK;
end;
在form1要调用form2使用
procedure Tform1.EditActionExecute(Sender: TObject);
begin
Edit;
end;
我不知道是不是这边会有影响?
 
procedure Tform1.EditActionExecute(Sender: TObject);
begin
Edit;
end;
当然你调用该方法form2当然就释放了! 不知道你的代码逻辑
很难按你给出的代码解决问题的
 
哦,我明白啦,估计是这边出了问题。
但在这边
Application.CreateForm(TForm2, Form2);
if Form2.ShowModal = mrok then
begin
DbEdit1.Text:=Form2.Edit1.Text;
end;
仍然不会有问题啊
 
多人接受答案了。
 
后退
顶部