我之前提出的问题看起来像这样,人们不理解。我将尝试更简洁,并将使用与Web应用程序中使用的Ajax进行比较。
我有主要表格。在那里,我有一个按钮,它将从一个字段中提取数据并发送到第二个表单,一个窗口将弹出并以更有条理的方式显示数据(A TListBox)。
我想知道是否有办法SecondForm.Show
将此数据作为参数发送,例如SecondForm.Show(data)
。
与Ajax的比较是,当你从一个html页面到服务器进行Ajax调用时,你发送封装数据,服务器接收它并使用它。
我希望我的主表单发送数据,第二种表单接收数据并使用它。
有可能吗?怎么样?
答案 0 :(得分:2)
如果我是你,我会在表单的构造函数中添加参数,以便从它存在的那一刻起就拥有所需的所有信息。
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;
答案 1 :(得分:1)
确定将数据从Main发送到SecondFrom的形式。例如在TStringList中。填写主窗体上的striglist,将其用作SecondForm.Show中的参数。
答案 2 :(得分:1)
这是您删除的其他问题的答案。它仍然适用我相信。
如果可行的话,总是更喜欢在构造函数中传递状态。
状态问题在发生变化时发生。变异状态使多线程混乱。如果状态稍后更改,则使状态副本变得不同步的代码。
构造函数执行时无法使用对象。这是改变状态的时候,因为没有其他方可以看到该突变的影响。一旦构造函数将新创建的对象返回给它的新所有者,它就会被完全初始化。
使用OOP样式很难将所有变异限制为构造函数。很少(如果有的话)图书馆承认这种编码风格。但是,你进入构造函数的突变越多,后来被发现的风险就越低。
实际上,对于您的情况,我怀疑这些风险很小。然而,作为一般原则,构造期间的初始化是合理的,并且均匀地遵守该原理是有意义的。