父窗口调用子窗口,子窗口又如何调用父窗口里的一个特殊的函数(方法)?
父窗口里的特殊函数是: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的函数,而不需要知道父窗口的函数名字。
这一招我常用。