为什么?有人回答我吗?50分很容易的拿去啊,(50分)

  • 主题发起人 主题发起人 DELPHI鸟
  • 开始时间 开始时间
D

DELPHI鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个子窗体form1中调用另一个子窗体form2,form2为查询条件选取,用了两个BITBTN
确定和放弃ModalResult设为mrok和mrcancel,kind设为bkok与bkCancel.
问题是:
procedure Tform1.BiBselClick(Sender: TObject);
begin
if not assigned(form2) then
form2 := Tform2.Create(Self);
form2.ShowModal;
if(form2.ShowModal=mrOk) then
begin

end ;
end ;
但是报错:CANNOT MAKE A VISIBLE WINDOW MODAL 这是什么原因
当我把 if(form2.ShowModal=mrOk) then
begin

end ;
注释掉是正常。
谁能告诉我错误原因和解决的方法
 
把 form2.ShowModal;
注释掉试试看。
 
还是不行啊。我以前也试过
是不是form2什么地方有错误导致的呢,(好象不大可能啊)。
 
试下 if(form2.ShowModal=1)
 
将代码改为如下再试试:
procedure Tform1.BiBselClick(Sender: TObject);
begin
if not assigned(form2) then
form2 := Tform2.Create(Application);
form2.ShowModal;
if(form2.ShowModal=mrOk) then
begin

end ;
end ;
 
程序没错呀,我用delphi6+win2000上,没有出现错误。
procedure Tform1.BiBselClick(Sender: TObject);
begin
if not assigned(form2) then
form2 := Tform2.Create(Self);
//form2.ShowModal;
if(form2.ShowModal=mrOk) then
begin

end ;
end ;
form2不自动创建。
 
那就应该把 form2.visiable 设置为 false
 
在form1中设置一个变量RetOk:Boolean;
在Form2中uses Form1
Form2中点击了OK,则Form1.RetOk:=True
否则Form1.RetOk:=False;
procedure Tform1.BiBselClick(Sender: TObject);
begin
if not assigned(form2) then
form2 := Tform2.Create(Self);
form2.ShowModal;
** if RetOk then
begin

end ;
end ;
 
如果FORM2是运行期创建的,可直接用FORM2.SHOWMODAL
当FORM2是设计期创建的,VISIBLE属性应设为FALSE
 
把Form2.showmodal改为Form2.show
 
procedure Tform1.BiBselClick(Sender: TObject);
begin
if not assigned(form2) then
begin
form2 := Tform2.Create(Self);
form2.ShowModal;
end
else
begin

end ;
end ;
 
procedure Tform1.BiBselClick(Sender: TObject);
begin
if form2=nil then
form2 := Tform2.Create(Self);
form2.ShowModal;
if(form2.ShowModal=mrOk) then
begin

end ;
form2.free;
form2:=nil;
end ;
 
同意yysun!肯定是你自已试错了!(我也遇到过这个问题的)
你先 showmodal 之后,然后再次 showmodal 当然会出错!
showmodal必需要保证窗体目前没有被显示。
procedure Tform1.BiBselClick(Sender: TObject);
begin
if not assigned(form2) then
form2 := Tform2.Create(Self);
//你看看窗体是否已经显示出来了。(应该不会显示出来),如果显示出来了,在这儿将它
VISIBLE改为 false
if(form2.ShowModal=mrOk) then
begin

end ;
end ;

BTY:
to Kingron:你平常就这样写代码的吗?判断和赋值都没搞清楚?
to netatom:画蛇添足,即使非要自已指定一个返回值,也应该用 modalresult 弄那么
多全局变量可没有什么好处。
 
多人接受答案了。
 
把if(form2.ShowModal=mrOk) then
改成
if Form2.ModalResult=mrOK then
就可以了。自己写代码,不注意!!!!!!!!
 
后退
顶部