问题1: 就是在delphi里为什么我可以直接引用 这样的过程:SpeedButtonADDClick(Sender)
但是就是不能引用这样的:DBGridBaseCellClick(Column);反正提示说Column没定义 ,请问这样的该怎么引用?
问题2:我点击窗口FORM2上的按钮A ,显示窗口FORM1,然后我关闭窗口FORM1,想把FORM2的数据刷新一下
那么FORM2怎么知道Form1已经关闭了?谢谢!
但是就是不能引用这样的:DBGridBaseCellClick(Column);反正提示说Column没定义 ,请问这样的该怎么引用?
问题2:我点击窗口FORM2上的按钮A ,显示窗口FORM1,然后我关闭窗口FORM1,想把FORM2的数据刷新一下
那么FORM2怎么知道Form1已经关闭了?谢谢!
Form2.RefreshData;如果不是ShowModal,可以Form1的关闭事件里调用。
TForm1.FormClose(...)
begin
Form2.RefreshData;
end;
Sender : TObject;而TObject是所有类的父类 所以SpeedButtonADDClick(Sender)没问题
而Column是哪个类型呢?
回答第二问题:
在FORM1关闭的时候刷新FORM2的数据 不是更好吗?
也就是说你在FORM1的OnClose事件里写刷新FORM2的数据的代码
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;
第一个问题楼主描述不清,所以不敢乱回答,第二个问题除了用ShowModal显示Form1的方法,还可以用消息通知的办法,这时就可以用Show来显示Form1窗体了,在Form1的OnClose事件向Form2窗体发送自定义消息,Form2收到消息后进行相应处理。
if mrok=form1.ModalResult then
刷新当然,上面这种方式在使用时,应该在关闭form1时设定ModalResult为mrok如果是用form1.show;打开的.在fomr1.onclose 事件中给form2发送一个关闭的消息.要在创建form1的时候将form2 的Handle 传递进去.
如果在 fomr1.onclose 中直接调用form2.刷新,在form1仅可能是form2创建的情况下也可以,但如果不是,
则用消息的方式更好一些,减少两个对象的关联程度
1.不知道楼主的意思是是Form2刷新数据的时候需要确认Form1已经关闭.
2.还是只有Form1关闭的时候就刷新一次数据.如果是情况2,按照楼上说的就OK了估计楼主是刚学Delphi,一般窗体的关闭有两种情况,
现在简单告诉你一下,当你点击窗体右上的X或者在代码中执行Form1.Close的时候,Form1有可能是真的关闭了
也有可能只是隐藏起来,等同于Form1.hide.楼主应该不是动态创建的窗体,也就是运行程序的时候已经创建了窗体了,所以你可以直接这样来判断是否隐藏了if Form1.Visible then
showmessage('窗体没隐藏')
else
showmessage('窗体隐藏');
end;
本来的是 procedure TF_Grade.DBGridBaseCellClick(Column: TColumn);//
我引用是这样写的DBGridBaseCellClick(Column);