在表单之间传递数据 - Ajax 比较

Passing data between forms - Ajax Comparison

我之前提过一个看起来像这样的问题,但人家没看懂。我将尝试更加简洁,并将与 Web 应用程序中使用的 Ajax 进行比较。

我有主窗体。我有一个按钮可以从字段中提取数据并发送到第二个表单,window 将弹出并以更有条理的方式显示数据(TListBox)。

我想知道是否有办法在 SecondForm.Show 上将此数据作为参数发送,例如 SecondForm.Show(data)

与Ajax的比较是,当您从html页面向服务器发出Ajax调用时,您发送封装数据,服务器接收并使用它.

我想让我的主窗体发送数据,第二个窗体接收数据并使用它。

可能吗?怎么样?

决定以何种形式将数据从Main发送到SecondFrom。例如在 TStringList 中。在主窗体上填写striglist,将其用作SecondForm.Show.

中的参数

如果我是你,我会向表单的 构造函数 添加参数,以便它从存在的那一刻起就拥有所需的所有信息。

constructor TSecondFrom.Create(AOwner: TComponent; AParam1: Integer; const AParam2: string);
begin
  inherited Create(AOwner);
  // Use or store parameters here
end;

不过,欢迎您改写一些其他方法,如果需要,您可以将其命名为 Show。定义它来接受你需要的任何参数,当你准备好时,你可以调用继承的零参数Show方法来使表单出现。

procedure TSecondForm.Show(AParam1: Integer; const AParam2: string);
begin
  // Use parameters here.
  inherited Show;
end;

这是您删除的其他问题的答案。我相信它仍然适用。

如果可行,总是喜欢在构造函数中传递状态。

状态发生变化时会出现问题。多线程被变异状态所混淆。如果状态稍后更改,则使状态副本变得不同步的代码。

构造函数正在执行时不能使用对象。那是改变状态的时候,因为没有其他方可以看到该突变的影响。一旦构造函数 returns 将新创建的对象交给它的新所有者,它就被完全初始化了。

OOP 风格很难将所有变化限制在构造函数中。很少有图书馆承认这种编码风格。但是,您向构造函数中注入的突变越多,以后被发现的风险就越低。

实际上,对于您的场景,我怀疑这些风险很小。但是,作为一般原则,构造期间的初始化是合理的,统一遵守该原则是有意义的。