我在form1的AdvStrgrid1中的cells[1,1]单元格添加了EditBtn可编辑按钮!点击这个按钮会弹出另一个窗体Form2,上面也有一个AdvStrgrid1。 现在我想在关闭Form2的时候返回一个计算结果给form1.AdvStrgrid1.cells[1,1]。
   例如:
      form2的Onclose事件里写:
       form1.AdvStrgrid1.cells[1,1]:=inttostr(strtoint(form2.AdvStrgrid1.cells[5,5])+
    strtoint(form2.AdvStrgrid1.cells[4,5]));
    我是这样去做的,但是在关闭Form2后,窗体1的AdvStrgrid1的单元格cells[1,1]里不会显示结果!是不是有EditBtn类型的单元格赋值语句不是这样写的???求教!!万分感谢了!!!小弟分不多,就这么点了。 

解决方案 »

  1.   

    赋值方式没问题,但我觉得写在onclose事件中不太合适,单击editbtn时,用form.ShowModal,再在ShowModal方法后form1.AdvStrgrid1.cells[1,1]:=inttostr(strtoint(form2.AdvStrgrid1.cells[5,5])+
      strtoint(form2.AdvStrgrid1.cells[4,5]));可以尝试调一下
      

  2.   

    你说的这个我试了,不行! 我现在做了一个简单的测试,就是在GetEditorType事件里写
    procedure TForm1.AdvStringGrid1GetEditorType(Sender: TObject; ACol,
      ARow: Integer; var AEditor: TEditorType);
    begin
     if acol=1 then
       AEditor:=ededitbtn;
    end;
    在onEllipsClick事件里写:
    procedure TForm1.AdvStringGrid1EllipsClick(Sender: TObject; ACol,
      ARow: Integer; var S: String);
    begin
      if acol=1 then
        form2.ShowModal;
    end;
    然后在Form2的onclose写:
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       form1.advstringgrid1.Cells[1,1]:=form2.advstringgrid1.Cells[1,1];
    end;
    然后我运行后,单机FOrm1的grid的[1,1]单元格里的editbtn,在Form2显示后,在单元格[1,1]里输入‘11’,关闭窗体,结果FOrm1的grid的[1,1]单元格没有变化。但是我把窗体2的赋值语句改为:
       form1.advstringgrid1.Cells[2,1]:=form2.advstringgrid1.Cells[1,1];或者其他
       form1.advstringgrid1.Cells[x,1]:=form2.advstringgrid1.Cells[1,1];
    只要不是你当前单机的这个单元格,那么关闭窗体2后,就会在窗体1的单元格出现‘11’!说明一个问题,advgrid里当前操作的editbtn单元格不能返回值,别的就可以!!大侠帮忙,看看有什么解决办法!!!万分感谢啊!!!!!!!!!!
      

  3.   


    上面那个打错了一个,应该是当我把窗体2的赋值语句改为:引用 1 楼 zhnglicho 的回复:
    赋值方式没问题,但我觉得写在onclose事件中不太合适,单击editbtn时,用form.ShowModal,再在ShowModal方法后form1.AdvStrgrid1.cells[1,1]:=inttostr(strtoint(form2.AdvStrgrid1.cells[5,5])+
    strtoint(form2.AdvStrgrid1.cells[4,5]));可以尝试……你说的这个我试了,不行! 我现在做了一个简单的测试,就是在GetEditorType事件里写
    procedure TForm1.AdvStringGrid1GetEditorType(Sender: TObject; ACol,
      ARow: Integer; var AEditor: TEditorType);
    begin
     if acol=1 then
      AEditor:=ededitbtn;
    end;
    在onEllipsClick事件里写:
    procedure TForm1.AdvStringGrid1EllipsClick(Sender: TObject; ACol,
      ARow: Integer; var S: String);
    begin
      if acol=1 then
      form2.ShowModal;
    end;
    然后在Form2的onclose写:
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      form1.advstringgrid1.Cells[1,1]:=form2.advstringgrid1.Cells[1,1];
    end;
    然后我运行后,单机FOrm1的grid的[1,1]单元格里的editbtn,在Form2显示后,在单元格[1,1]里输入‘11’,关闭窗体,结果FOrm1的grid的[1,1]单元格没有变化。但是我把窗体2的赋值语句改为:
      form1.advstringgrid1.Cells[1,2]:=form2.advstringgrid1.Cells[1,1];或者其他
      form1.advstringgrid1.Cells[1,x]:=form2.advstringgrid1.Cells[1,1];
    只要不是你当前单机的这个单元格,那么关闭窗体2后,就会在窗体1的单元格出现‘11’!
      

  4.   


    引用 1 楼 zhnglicho 的回复:
    赋值方式没问题,但我觉得写在onclose事件中不太合适,单击editbtn时,用form.ShowModal,再在ShowModal方法后form1.AdvStrgrid1.cells[1,1]:=inttostr(strtoint(form2.AdvStrgrid1.cells[5,5])+
    strtoint(form2.AdvStrgrid1.cells[4,5]));可以尝试……
    上面那个打错了一个,应该是当我把窗体2的赋值语句改为:
      form1.advstringgrid1.Cells[1,2]:=form2.advstringgrid1.Cells[1,1];或者其他
      form1.advstringgrid1.Cells[1,x]:=form2.advstringgrid1.Cells[1,1];
    只要不是你当前单机的这个editbtn单元格,那么关闭窗体2后,就会在窗体1的单元格出现‘11’!
      

  5.   

    在onEllipsClick事件里写:
    procedure TForm1.AdvStringGrid1EllipsClick(Sender: TObject; ACol,
      ARow: Integer; var S: String);
    begin
      if acol=1 then
      begin
        form2.ShowModal;
        S:=form2.advstringgrid1.Cells[1,1];
      end;
    end;