1.我在显示一个窗体时,首先创建这个窗体。
xs_jd:=Txs_jd.Create(application);
 xs_jd.Show;
当我在xs_jd的oncreate事件中写入
xs_jd.StringGrid1.Cells[1,0]:='序号';
 xs_jd.StringGrid1.Cells[2,0]:='类别';
时出现错误Project CRM.EXE raised exception class EAccessViolation with message'Access violation at address 004E6E57 in module 'CRM.EXE''.如果不写入代码又正常显示
2.我设了一个窗体为主窗体的子窗体。由于在关闭子窗体时,他只会最小化,我在子窗体的onclose中加入
  action := cafree;
  frmClsld := nil;才正常关闭。由于我需要这个子窗体在关闭时,返回一个字段值给另一个子窗体。于是加入
if form1.khxscs=1 then
 if dm.kh_query.RecordCount>0 then
  begin
   if cs=3 then
    dm.kh_query.Last;
   form1.edit1.Text:=dm.kh_query['khmc'];
   form1.combobox3.SetFocus;
  end;
  action := cafree;
  frmClsld := nil;
可也出现上面的错误提示。
请问这两个是什么原因,另外如何解决。
其实我主要目的是一个主窗口,当点击菜单时,弹出窗口。用show显示时,可当鼠标点主窗口时,该窗口会自动关闭。另外用showmodal时,当需要点击菜单上的其它窗口时,必须关闭此窗口。我需要的是点击主窗口时即不会自动关闭,而需要点另外窗口时,也不需要关闭此窗口。我是菜鸟请多多指点。
还有一个小问题是关于DGBRIDeh的。我想设置其中一列是可编辑的,其它是不可的,如果用readonly来设的话,当我修改了可编辑这列的最后一个字段值时,如果按鼠标向下方向健的话,会出现一个空白行。会出错,由于我是从表里直接读出来的数据不需要增加。只需修改就可了。这如何解决

解决方案 »

  1.   

    1.下面代码明显有问题
    xs_jd:=Txs_jd.Create(application); 
    xs_jd.Show; 
    当我在xs_jd的oncreate事件中写入 
    xs_jd.StringGrid1.Cells[1,0]:='序号'; 
    xs_jd.StringGrid1.Cells[2,0]:='类别'; 
    //试问既然StringGrid1在这个Txs_jd里面,为什么还xs_jd.StringGrid1这样。就直接可以StringGrid1.Cells[1,0]:='序号';这样写嘛。 lz仔细检查Txs_jd里面是否有StringGrid1这个组件2.因为你创建的时候Owner指定的为Application,所以你在Onclose里面就不能action := cafree; 
      frmClsld := nil;,因为你在主窗口退出的时候Vcl会去检查xs_jd是否已经释放,而此时你在子窗体关闭的时候已经释放了,所以非法访问内存。
      正确做法: xs_jd:=Txs_jd.Create(nil); 
       
      

  2.   

    procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     tabsheet1.TabVisible:=true;
     tabsheet2.TabVisible:=false;
     if form1.khxscs=1 then  //khxscs是判定此窗口3是由菜单打开的,还是由另一个子窗口1打开的。后者返回个参数给那个子窗口1(注,在这个子窗口3打开的时候窗口1是没有关闭的。,)
     if dm.kh_query.RecordCount>0 then
      begin
       if cs=3 then 
        dm.kh_query.Last;
       form1.edit1.Text:=dm.kh_query['khmc'];
       form1.combobox3.SetFocus;
      end;
     form3:=Tform3.Create(nil);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
     khxscs:=1;
     form3:=Tform3.Create(application);
     form3.Show; 
    end;
      

  3.   

    我在菜单上也写了
    form3:=Tform3.Create(application);
    form3.Show; 
    我是点击菜单上的打开子窗口的。退出就出错