我通过MDI子窗体做了一个MDI结构的数据库系统(其中用了一个公有数据模块,并且MDI子窗体是动态创建),调试中,当在主窗体上切换MDI子窗体时,出现"工程'project.exe'检测到错误类EAccessviolation,错误信息:存取地址004E36EC违例发生在模块'project.exe'中,读 在00000001里,进程中止,使用单步或并行继续运行".确定后继续运行,又出现提示"存取地址"004E3768违例发生在模块'project.exe'中,读 在地址00000000里",但窗体会显示出来.如果再继续切换几次,就会出现"入口违规:地址0000000,读对于地址00000000",并且窗体不能显示.以上的数字字符串有变化.遇到这类问题真伤脑筋,请各位打虾帮帮忙,在下不胜感激!
procedure TF_Main.M_ClassClick(Sender: TObject);
begin
if CreateForm(F_Class)=false then
F_Class:=TF_Class.Create(Application);
DM.DS_Class.Enabled :=true;
end;
CreateForm--动态创建窗体函数
F_Class--MDI子窗体
DM--数据模块
DS_Class--数据源函数CreateForm如下:
function TF_Main.CreateForm(CForm:TForm):boolean;
var
No:integer;
FormExist:boolean;
begin
FormExist:=false;
if (CForm=NiL) then
begin
CreateForm :=false;
exit;
end;
for No:=0 to Screen.FormCount -1 do
begin
if Screen.Forms[No].ClassType =CForm.ClassType then
FormExist:=true;
end;
if FormExist=false then
CreateForm:=false;
if CForm.WindowState =wsMinimized then
ShowWindow(CForm.Handle,SW_SHOWNORMAL)
else
ShowWindow(CForm.Handle,SW_SHOWNA);
if not CForm.Visible then
CForm.Visible :=true;
CForm.BringToFront ;
CForm.SetFocus ;
CreateForm:=true;
end;MDI子窗体上的关闭按钮:
procedure TF_Class.ToolButton12Click(Sender: TObject);
begin
inherited;
F_Class.Close;
end;MDI子窗体模板:
procedure TF_Inherit.FormClose(Sender: TObject; var Action: TCloseAction);
begin {*****窗口关闭事件*****}
case (Sender as TForm).Tag of //判断关闭窗口的标志值
1: begin
DM.DS_Class.Enabled := false;
end;
end;
Action := caFree; //释放空间
// (Sender as TForm).Free;
end;数据模块中一些按钮与数据源的关联:
procedure TDM.DS_ClassStateChange(Sender: TObject);
begin
F_Class.ToolButton4.Enabled :=(DS_Class.State =dsEdit) or (DS_Class.State =dsInsert);
F_Class.ToolButton6.Enabled :=F_Class.ToolButton4.Enabled ;
end;procedure TDM.DS_ClassDataChange(Sender: TObject; Field: TField);
begin
F_Class.ToolButton3.Enabled :=(AT_Class.RecordCount >0);
end;