想实现a窗体输入的参数关闭后返回给b窗体,大家是如何做的?(34分)

  • 主题发起人 主题发起人 bywind
  • 开始时间 开始时间
B

bywind

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样才能耦合较少,???
 
建立一个代理类,在B中初始化
B调用A的时候,将代理类传出
A关闭时操作代理类
 
在B中定义个公共变量,在A关闭前,把值赋给在B中定义的这个变量 。
 
关键是a窗体的参数存放在哪里的问题,定义个全局变量(对象)来存放,这样a、b窗体都不相关。
 
用消息吧,用消息,简单省事
 
function GetChildData(AOwner: TCompoment
var Data1, Data2: string): Boolean;
begin
with TChildForm.Create(AOwner) do
try
Result := ShowModal = mrOK;
if Result then
begin
Data1 := Edit1.Text;
Data2 := Edit2.Text;
end;
finally
Free;
end;
end;
 
比较笨的方法就是使用公用变量,如果引用窗体,那么被引用的窗体中的对象都是可用的!
 
不可以用全局
严重违背OOP的设计原则
这样只会增加模块间的耦合性
 
同意anyway观点,但是用消息传递不会
 
写程序千万不要给这个原则那个原则给框死了
用消息?难道消息就不是全局变量了?就没有耦合了?
Delphi完全OOP吗?不是! 大把全局变量
用一个公共单元吧
 
在b中创建一个私有变量,在a创建时将它传入(传地址) 即可。
 
同意大鱼的观点, 当然如果只是A与B之间交换, 我最简单的做法是:
B.Data := A.Data
// 前提是A虽然关闭(显示), 但A并没有销毁;
 
[:D]有些人喜欢在窗体OnClose 里面加Action := caFree;[:D]
 
在A中定义一个类方法(且命名为Perform),在B中定义一个Protected变量(且命名为Data),
B.Data = TClassA.Perform;

A中的Perform方法式至如下
class function String Perform;
begin
with TClassA.Create(Nil) do
try
//do something
if ShowModel = mrOk
then Result := some value
else Result := other value;
finally
Free;
end;
end;
 
后退
顶部