ShowModal没问题啊。例如下面的代码 procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin with TForm2.Create(Self) do try i := ShowModal; finally Free; end;//end of try ShowMessage(IntToStr(i)); end; -------------------- 楼主是不是忘记Create了
dulei115() ( ) 信誉 用你的方法,加了create,還是一樣,錯誤提示為: Access Violation at address 0078DA1E in module '程式名.exe',Read of address 00000000,請指教,謝謝!
你确定是因为ipo:=frmShow.ShowModal;导致的出错么?
整段代碼如下: procedure TfrmDetailProvidePurchase.accOpenExecute(Sender: TObject); var iProviderID:integer begin inherited; iProviderID:=frmProviderFilter.showmodal; if iProviderID>0 then begin if QinfoBase.Locate('fId',iProviderID,[]) then dsInfoBase.Enabled :=True; with pProvidePurchase do begin Parameters.ParamByName('@ProviderID').Value := iProviderID; Parameters.ParamByName('@BeginDate').Value := DateTimePicker1.Date ; Parameters.ParamByName('@EndDate').Value := DateTimePicker2.Date ; if active then Requery else Open; end; end; end;
上面的代码,两个地方有问题,frmProviderFilter.showmodal前一定要有create: frmProviderFilter := frmProviderFilter.create(selef); 用完后还要frmProviderFilter.Free;看代码,楼主是想用showmodal返回一个整形的值ProviderID,那你frmProviderFilter里面怎样给showmodal赋值的? 正确方法是在frmProviderFilter中写:ModalResult := 9999;//返回9999示例: Form1中: use Unit2procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin with TForm2.Create(Self) do try i := ShowModal; finally Free; end;//end of try ShowMessage(IntToStr(i)); end; ------------------------------------------- Form2中: procedure TForm2.Button1Click(Sender: TObject); begin ModalResult := 9999; end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
with TForm2.Create(Self) do
try
i := ShowModal;
finally
Free;
end;//end of try
ShowMessage(IntToStr(i));
end;
--------------------
楼主是不是忘记Create了
用你的方法,加了create,還是一樣,錯誤提示為:
Access Violation at address 0078DA1E in module '程式名.exe',Read of address 00000000,請指教,謝謝!
procedure TfrmDetailProvidePurchase.accOpenExecute(Sender: TObject);
var
iProviderID:integer
begin
inherited;
iProviderID:=frmProviderFilter.showmodal;
if iProviderID>0 then
begin
if QinfoBase.Locate('fId',iProviderID,[]) then
dsInfoBase.Enabled :=True;
with pProvidePurchase do
begin
Parameters.ParamByName('@ProviderID').Value := iProviderID;
Parameters.ParamByName('@BeginDate').Value := DateTimePicker1.Date ;
Parameters.ParamByName('@EndDate').Value := DateTimePicker2.Date ;
if active then Requery else Open;
end;
end;
end;
frmProviderFilter := frmProviderFilter.create(selef);
用完后还要frmProviderFilter.Free;看代码,楼主是想用showmodal返回一个整形的值ProviderID,那你frmProviderFilter里面怎样给showmodal赋值的?
正确方法是在frmProviderFilter中写:ModalResult := 9999;//返回9999示例:
Form1中:
use Unit2procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
with TForm2.Create(Self) do
try
i := ShowModal;
finally
Free;
end;//end of try
ShowMessage(IntToStr(i));
end;
-------------------------------------------
Form2中:
procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := 9999;
end;
很感謝你的幫助,用你所說的方法我試過,還是不行,一樣的出錯信息,真不知那裡有問題?這應該與繼承窗體沒多大的關系吧,我的FORM2是第三層繼承。
判断ipo=mrOK
就OK了