首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

父窗口调用子窗口,子窗口又怎么调用父窗口里的一个特殊的函数(方法)

2014-05-12 
父窗口调用子窗口,子窗口又如何调用父窗口里的一个特殊的函数(方法)?父窗口里的特殊函数是:procedure TFor

父窗口调用子窗口,子窗口又如何调用父窗口里的一个特殊的函数(方法)?
父窗口里的特殊函数是:procedure TFormTld.tj();

父窗口打开子窗口:
    FormSelectKcsp := TFormSelectKcsp.Create(Self);
    try
      FormSelectKcsp.ShowModal;
    finally
      FormSelectKcsp.Free;
    end;

调用父窗口的方法很多。
一、use 父单元旦,直接调
二、回调函数
二、发送窗口消息,处理消息函数。
四、还没想起来。

        //(OBj as TForm).Name.tj();
        //TForm(Owner).FindComponent('tj').Click();
        //Self.Owner.tj();
        //TForm(OBj).tj();
        //(OBj as TForm).tj();
        //TForm(Owner).tj;
这样都不行

父窗口不能写死了,因为很多父窗口调用这个子窗口,
我知道父窗口控件可以这样找到:
Result:=TForm(Owner).FindComponent('ClientDataSet1') as TClientDataSet;
于是想通过这样的方式来调用父窗口里的函数,
现在我这个函数已经这样写了,在这个基础上子窗口如何调用父窗口里的函数tj ?


[解决办法]
如果啥都不确定,可以用RTTI
[解决办法]
用事件处理吧!?
[解决办法]
用消息,在创建子窗体后将父窗体的句柄传递给子窗体,子窗体通过句柄给父窗体发送消息。父窗体接收到消息后执行函数或过程。
[解决办法]
子窗口unit申明:
type
  TReturnProc = procedure of obejct;

子窗口定义添加:
TFormSelectKcsp = class
  ReturnProc:TReturnProc;
end;

父窗口实例化子窗口:
FormSelectKcsp := TFormSelectKcsp.Create;
FormSelectKcsp.ReturnProc := Self.tj;
FormSelectKcsp.ShowModal;
FormSelectKcsp.Free;

子窗口在结束自身使命的事件上调用回调函数
procedure TFormSelectKcsp.OnButton1Click;
begin
  if Assigned(ReturnProc) then
    ReturnProc;
end;

如此一来,子窗口按下Button1就会回调父窗口赋值给ReturnProc的函数,而不需要知道父窗口的函数名字。
这一招我常用。

热点排行