Delphi 在两个 windows 之间发送值 - createparams override

Delphi sending value between two windows - createparams override

您好,我有主窗体和另外两个窗体。两者在 createparams

上都有此代码
procedure TfrForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    ExStyle := ExStyle or WS_EX_APPWINDOW;
  end;
end;

并且(TfrForm2 和 TfrForm3)都使用代码从主窗体打开:

with TfrForm2.Create(Application) do
  try
    Show;
  finally
  end;

所以我可以在 taskabr 上有 3 个按钮(main、form2、form3)。但是我怎样才能在 form2 和 form3 之间发送数据(例如整数值)或者从 form 3 将 form2 带到前面(通过单击 form 3 上的按钮等)? ?

正如 David Heffernan 所说,最简单的方法是使用表单引用。

如果每个表单都在其单独的单元中声明,您可以将该单元添加到使用部分,这样您就可以访问该表单引用。

请注意,为了避免循环引用,您应该将另一个表单单元添加到 uses 部分,它是实现部分的一部分(单元中间的那个),而不是接口的一部分部分(设备顶部)。

这样做可以让您访问在该特定单元中声明的对象、方法、变量和常量,但不允许您派生现有对象的任何子类,除非您通过声明局部类型(声明对象在现有方法的范围内键入)。

unit UMainForm;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TMainForm = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementaion
//Add another form unit here to avoid problems with circular referencing
uses UMySecondForm;

默认情况下 delphi 不会在 implementaion uses 部分添加任何内容,因此那里没有 uses 子句。所以你应该自己添加。

警告!通过在另一个单元中声明的引用访问另一个表单时,请特别注意首先检查表单引用是否确实引用了正确的表单对象(确保表单已经创建且尚未销毁),否则您最终会得到大量访问冲突错误。