我的问题是这样的:有三个窗体 frmA,frmB,frmC在frmA中这样调用frmB:
procedure .....
with TfrmB.Create(Self,optAdd,-1) do
try
ShowModal;
DM.qryAppTest.Close;
DM.qryAppTest.Open;
finally
Free;
end;
end;frmB中的关键相应代码:constructor Create(AOwner: TComponent;AOperateType: TOperateType;ATestID: Integer); reintroduce;{这是定义}{构建函数}
constructor TfrmB.Create(AOwner: TComponent;AOperateType: TOperateType;ATestID: Integer);
begin
inherited Create(AOwner);
FOperateType:=AOperateType;
FTestID:=ATestID; ClearData;
if FOperateType=optEdit then
LoadData;
end;然后在frmB中又调用到frmC
procedure TfrmB.btnRyxmClick(Sender: TObject);
begin
with TfrmC.Create(Self,1) do
try
ShowModal;
finally
Free;
end;
end;frmC中的代码如下:
constructor Create(AOwner: TComponent;AFlag: Integer); reintroduce;{定义}constructor TfrmC.Create(AOwner: TComponent;AFlag: Integer);
begin
inherited Create(AOwner);
FFlag:=AFlag;
end;后面我想把frmC中的一些数据赋值给frmB中的变量,可是一直报错:
赋值代码:
frmB.FManID:=1;
frmB.FYpxmID:=2;错误提示:project a.exe raised exception class EAccessViolation with message'Access
violation at address 00558EC1 in module 'a.exe'.Write of address 00000358'.
Process stopped.Use Step or Run to continue.不知道如何解决,请大家指教呀!
procedure .....
with TfrmB.Create(Self,optAdd,-1) do
try
ShowModal;
DM.qryAppTest.Close;
DM.qryAppTest.Open;
finally
Free;
end;
end;frmB中的关键相应代码:constructor Create(AOwner: TComponent;AOperateType: TOperateType;ATestID: Integer); reintroduce;{这是定义}{构建函数}
constructor TfrmB.Create(AOwner: TComponent;AOperateType: TOperateType;ATestID: Integer);
begin
inherited Create(AOwner);
FOperateType:=AOperateType;
FTestID:=ATestID; ClearData;
if FOperateType=optEdit then
LoadData;
end;然后在frmB中又调用到frmC
procedure TfrmB.btnRyxmClick(Sender: TObject);
begin
with TfrmC.Create(Self,1) do
try
ShowModal;
finally
Free;
end;
end;frmC中的代码如下:
constructor Create(AOwner: TComponent;AFlag: Integer); reintroduce;{定义}constructor TfrmC.Create(AOwner: TComponent;AFlag: Integer);
begin
inherited Create(AOwner);
FFlag:=AFlag;
end;后面我想把frmC中的一些数据赋值给frmB中的变量,可是一直报错:
赋值代码:
frmB.FManID:=1;
frmB.FYpxmID:=2;错误提示:project a.exe raised exception class EAccessViolation with message'Access
violation at address 00558EC1 in module 'a.exe'.Write of address 00000358'.
Process stopped.Use Step or Run to continue.不知道如何解决,请大家指教呀!
解决方案 »
- adoquery和combobox奇怪问题(难度应该不是很大,解决给分,在线等待)
- C++到Delphi转换问题
- 请教各位高手,怎样才能在程序启动时,执行“scktsrvr.exe”命令,启动SOCKET服务?
- GTpicture对象的高度有限制吗?我在实践中发现一个奇怪的现象,请大家进来瞧瞧,并发现意见
- 什么方法能在调用QRP文件后能设置打印机?
- DELPHI可以进行PDA嵌入式开发吗
- 如何在指定目录下创建一个临时表(dbase5格式),急切需要!!!希望大家多多指教。
- 请问几个在利用mts作为中间件,开发三层的问题?
- 怎样直接在查询结果中修改
- DBNavigator怎么用?
- 请问怎样在用OpenPictureDialog 打开的图片选择界面中加入自己的按钮?
- 关于学校的收费软件
以前也遇到过此麻烦。解决了。
每个frm都有一个系统生成的实例。
你的frma是系统生成的。你的frmb 和 frmc 也是系统生成的。既然系统已经生成他们了,所以编译的时候可以通过,但是他们没有初始化!
关键就是这句坏了事:
with TfrmB.Create(Self,optAdd,-1) do
改成
with frmb=TfrmB.Create(Self,optAdd,-1) do
再到系统配置里把frmb,frmc的自动生成属性消掉。
可能也要注掉这句:constructor Create(AOwner: TComponent;AOperateType: TOperateType;ATestID: Integer); reintroduce;{这是定义}手边没有delphi,
未验证。
private
FManID : Integer;
FYpxmID: Integer;
end; TfrmC = class(TForm)
private
FManID : PInteger;
FYpxmID: PInteger;
constructor Create(AOwner: TComponent; AFlag: Integer; AManID: PInteger); reintroduce;
end;constructor TfrmC.Create(AOwner: TComponent; AFlag: Integer; AManID, AYpxmID: PInteger); reintroduce;
begin
FManID := AManID;
FYpxmID:= AYpxmID;
end;procedure TfrmC.XXX();
begin
FManID^ := 1;
FYpxmID^ := 2;
end;procedure TfrmB.btnRyxmClick(Sender: TObject);
begin
with TfrmC.Create(Self,1, @FManID, @FYpxmID) do
try
ShowModal;
finally
Free;
end;
end;
TfrmC......
private
PSendForm:Pointer;
constructor Create(AOwner: TComponent; ASendForm:Pointer); reintroduce;
......constructor TfrmC.Create(AOwner: TComponent; ASendForm:Pointer); reintroduce;
begin
PSendForm:=ASendForm;
end; procedure Tfrmc.btnRyxmClick(Sender: TObject);
begin
TfrmB(PSendForm).Show;
TfrmB(PSendForm).Edit1.Text:='He';
TfrmB(PSendForm).FypxmId:=98;
......
end;
procedure TfrmB.btnRyxmClick(Sender: TObject);
begin
with TfrmC.Create(Self,@frmB) do
try
ShowModal;
finally
Free;
end;
end;
FID:string;
public
property ID:string read FID write FID;fromB:
procedure TfrmB.btnRyxmClick(Sender: TObject);
begin
with TfrmC.Create(Self,1) do
try
ShowModal;
showmessage( ID );
finally
Free;
end;
end;