问题1: 就是在delphi里为什么我可以直接引用  这样的过程:SpeedButtonADDClick(Sender)
但是就是不能引用这样的:DBGridBaseCellClick(Column);反正提示说Column没定义 ,请问这样的该怎么引用?
问题2:我点击窗口FORM2上的按钮A ,显示窗口FORM1,然后我关闭窗口FORM1,想把FORM2的数据刷新一下
那么FORM2怎么知道Form1已经关闭了?谢谢!

解决方案 »

  1.   

    1、Sender是 Delphi里定义的,帮助里解释:In an event handler, the Sender parameter indicates which component received the event and therefore called the handler.而Column是没有定义,如果要这样用,那需要定义一个和函数声明匹配的Column变量。2、如果是ShowModal,那就可以直接处理。Form1.ShowModal;
    Form2.RefreshData;如果不是ShowModal,可以Form1的关闭事件里调用。
    TForm1.FormClose(...)
    begin
        Form2.RefreshData;
    end;
      

  2.   

    先回答第一个问题:
    Sender : TObject;而TObject是所有类的父类 所以SpeedButtonADDClick(Sender)没问题
    而Column是哪个类型呢?
    回答第二问题:
    在FORM1关闭的时候刷新FORM2的数据 不是更好吗?
    也就是说你在FORM1的OnClose事件里写刷新FORM2的数据的代码
      

  3.   

    问题1:估计你是在某个过程里SpeedButtonADDClick(Sender),比如:
    SpeedButton1Click(Sender:TObject)
    begin
    SpeedButtonADDClick(Sender);//Sender:TObject时已经定义了Sender是一个属于TObject类型的对象
    end;
    这样确实是对的,SpeedButtonADDClick(Sender)中的Sender是SpeedButton1Click过程的一个参数,也就是说
    你引用SpeedButtonADDClick(Sender)中,Sender是作为实参的,在进入过程的时候已经创建了对象,所以自然可以执行.引用DBGridBaseCellClick(Column)的情况,Column根本就没定义,你连他是什么数据类型都没说清楚,怎么可以作为参数呢?
    SpeedButton1Click(Sender:TObject)
    begin
    DBGridBaseCellClick(Column);    //在这里,Column是一个还没有定义的对象
    end;
      

  4.   


    第一个问题楼主描述不清,所以不敢乱回答,第二个问题除了用ShowModal显示Form1的方法,还可以用消息通知的办法,这时就可以用Show来显示Form1窗体了,在Form1的OnClose事件向Form2窗体发送自定义消息,Form2收到消息后进行相应处理。
      

  5.   

    form2在打成form1 时是用什么方式?如果是用form1.showmodal 打开的,form1.showmodal;
    if mrok=form1.ModalResult then
      刷新当然,上面这种方式在使用时,应该在关闭form1时设定ModalResult为mrok如果是用form1.show;打开的.在fomr1.onclose 事件中给form2发送一个关闭的消息.要在创建form1的时候将form2 的Handle 传递进去.
    如果在 fomr1.onclose  中直接调用form2.刷新,在form1仅可能是form2创建的情况下也可以,但如果不是,
    则用消息的方式更好一些,减少两个对象的关联程度
      

  6.   

    问题2:楼上说在Form1的OnClose事件中写只能针对某种情况吧!
    1.不知道楼主的意思是是Form2刷新数据的时候需要确认Form1已经关闭.
    2.还是只有Form1关闭的时候就刷新一次数据.如果是情况2,按照楼上说的就OK了估计楼主是刚学Delphi,一般窗体的关闭有两种情况,
    现在简单告诉你一下,当你点击窗体右上的X或者在代码中执行Form1.Close的时候,Form1有可能是真的关闭了
    也有可能只是隐藏起来,等同于Form1.hide.楼主应该不是动态创建的窗体,也就是运行程序的时候已经创建了窗体了,所以你可以直接这样来判断是否隐藏了if Form1.Visible then
    showmessage('窗体没隐藏')
    else
    showmessage('窗体隐藏');
    end;
      

  7.   

    不好意思 
    本来的是 procedure TF_Grade.DBGridBaseCellClick(Column: TColumn);//
    我引用是这样写的DBGridBaseCellClick(Column);