请问一个控制Show运行先后问题 (50分)

  • 主题发起人 主题发起人 windlin
  • 开始时间 开始时间
W

windlin

Unregistered / Unconfirmed
GUEST, unregistred user!
主Form为MDIForm,有两个子Form为ChildForm,在第一个ChildForm里调用第二个ChildForm时,现在出现,在建立第二个ChildForm时,先运行第二ChildForm里的Tfrm_form2.FormShow(Sender: TObject);过程,再对它里面一个属性赋值。
1.我想控制:在建立第二个ChildForm时,先对它里面一个或一组属性赋值,再运行第二ChildForm里的Tfrm_form2.FormShow(Sender: TObject);过程
下面是代码:
第一个ChildForm
procedure Tfrm_form1.btEditClick(Sender: TObject);
var
tmpForm:Tfrm_form2;
begin
inherited;
tmpForm:= Tfrm_form2.Create(Self); // 建立
tmpForm.Tableid:=RS.fieldbyName('billid').AsInteger; // 赋值
tmpForm.Show; // 运行Show
end;
第二个ChildForm
procedure Tfrm_form2.FormShow(Sender: TObject);
var
tmpSql: string;
i:integer;
begin
inherited;
tmpSql:= 'select * from Tbill where billid='+IntToStr(Tableid);
with query1 do
begin //
Close;
SQL.Clear;
SQL.Add(tmpSql);
try
Open;
except
Application.MessageBox('do not conn','提示信息',MB_OK);
Exit;
End;
end; //
query1.First;
i:=query1.RecordCount;
end;
 
现在有什么问题?
先对tmpSql赋值,后面却使用sql_str?
Tableid定义在Tfrm_form2的public里。
将SQL.Add(sql_str);改为SQL.Add(tmpSql);

 
请注意一下:
我在建立tmpForm:= Tfrm_form2.Create(Self);的时候先运行了 tmpForm.Show; // 运行
再去运行 tmpForm.Tableid:=RS.fieldbyName('billid').AsInteger; // 赋值

我想的结果是:
我在建立tmpForm:= Tfrm_form2.Create(Self);的时候先运行
tmpForm.Tableid:=RS.fieldbyName('billid').AsInteger; // 赋值
再去运行 tmpForm.Show; // 运行

 
你试过不行吗?
 
试过没有用
我在Show里一段代码,我在赋值的时候也不止赋一个Tableid的值呀,我需要赋一组值
有谁遇到过这样的问题吗?
我在建立tmpForm:= Tfrm_form2.Create(Self);的时候先运行
tmpForm.Tableid:=RS.fieldbyName('billid').AsInteger; // 赋值
再去运行 tmpForm.Show; // 运行

 
还是没太明白意思!
我在建立tmpForm:= Tfrm_form2.Create(Self);的时候先运行
tmpForm.Tableid:=RS.fieldbyName('billid').AsInteger; // 赋值
你tmpform没建立肯定不能赋值
 
已经建立了,但MDIChild窗体有点特殊,在Create的时候就能显示(Visble),不需要用Show方法。所以你的赋值相当于在FormShow之后。
 
MDIChild窗体真的有些问题,我在建立的时候,还没有FormShow,但是我在建立的时就运行了第二个ChildForm里的FormShow过程,从而使这句话的值
tmpSql:= 'select * from Tbill where billid='+IntToStr(Tableid);的值变成下面的值
tmpSql:= 'select * from Tbill where billid=0';
 
你可以用一个过程控制赋值时,进行读取数据并显示
 
接受答案了.
 
后退
顶部