【问题标题】:Delphi sending value between two windows - createparams overrideDelphi 在两个窗口之间发送值 - createparams 覆盖
【发布时间】:2015-05-02 10:33:29
【问题描述】:

您好,我有主表单和另外两个表单。两者都在 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 之间发送数据(例如整数值)或从表单 3 到前面的 form2(通过单击表单 3 上的按钮等)? ?

【问题讨论】:

  • 将表单引用存储在变量中。为什么选择丢弃表单引用?

标签: windows forms delphi send


【解决方案1】:

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

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

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

这样做会增加您对在该特定单元中定义的对象、方法、变量和常量的访问权限,但它不允许您在那里派生现有对象的任何子类,除非您通过声明局部类型(在内部声明对象类型)现有方法的范围)。

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 不会在实现使用部分添加任何内容,因此那里没有使用子句。所以你应该自己添加它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多