Form1中创建了Form2,Form2反过来调用Form1的方法

比特灵 2017-11-11 03:03:26
目标是:两个独立的form,启动时启动的是Form1,然后用户点击编辑时打开Form2,这时候两个form都是正常使用的。
但是Form2编辑一条数据后,希望立刻刷新Form1的数据显示,这样就需要调用Form1的方法。

最开始的做法1:只在Form1 中 最开始的use 模块增加了 Unit2,这样就能完成前面的,后来在Form2的use模块时添加 use Unit1就会报错。

修改Unit1.pas为:

implementation

uses
Unit2;
...

procedure TForm1.ToolButton2Click(Sender: TObject);
var
Form2: TForm2;
begin
Form2 := TForm2.Create(application, Form1);
Form2.Visible := true;
end;


Unit2.pas为:

...
implementation

uses
Unit1;

{ 重写构造函数,这样可以把FORM1初始化进来 }
constructor TForm2.Create(AOwner: TComponent; AParent: TWinControl);
begin
Fparent_Form1 := AParent;
inherited Create(AOwner);
setparent(form1);
end;

{在需要Form1时}
{ 保存 }
procedure TForm2.BitBtn1Click(Sender: TObject);
var
form1: TForm1;
begin
...
{强制造型为}
form1 := TForm1(Fparent_Form1);
form1.LoadDatas();
end;



经过以上改动,原来不相干的两个Form发生了关联,打开Form2的时候出现在Form1的窗口内部,而且Form2的文本输入框不能用了。。。
...全文
476 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
比特灵 2017-11-14
  • 打赏
  • 举报
回复
重新建了一个项目,是可以直接访问的,但是很奇怪,前面这个工程还是这样,可能是FORM的哪个属性设置的有问题。。。再研究吧。
zbdzjx 2017-11-13
  • 打赏
  • 举报
回复
好久没用Delphi了,印象中,如果已经“uses Unit1;”了,应该可以直接在Form2中调用Form1的函数吧。
日月路明 2017-11-12
  • 打赏
  • 举报
回复
可以在Unit2中这样操作: type TOnAfterEdit=procedure of Object; 在:Form2中增加属性 property OnAfterEdit:TOnAfterEdit read FTOnAfterEdit write TOnAfterEdit; ..... procedure TForm2.BitBtn1Click(Sender: TObject); begin  if assigned( FTOnAfterEdit ) then FTOnAfterEdit ; end; 在Unit1中: procedure TForm1.ToolButton2Click(Sender: TObject); var   Form2: TForm2; begin   Form2 := TForm2.Create(self); Form2.OnAfterEdit:=LoadDatas;   Form2.Visible := true; end; 以上是示意代码,直接在浏览器中写的,实际运行需要适当调整,楼主理解就行了
日月路明 2017-11-12
  • 打赏
  • 举报
回复
搞得太复杂,设置一个回掉函数就行了

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧