以DRY原则为主导,这是在Delphi中使用一个动作显示两个子表单的最佳方式。 我的父表单有两个子表单的两个按钮。我有TActionList,其中TAction与OnExecute事件一起添加。子窗体的这两个按钮使用一个动作打开它们的最佳方法是什么。
答案 0 :(得分:3)
我会使用两个共享相同OnExecute
事件处理程序的操作。使用该事件处理程序的Sender
参数来区分:
procedure TMainForm.acShowFormExecute(Sender: TAction);
begin
if Sender=acShowForm1 then
Form1.Show
else if Sender=acShowForm2 then
Form2.Show
else
raise ESomeInternalExceptionClass.Create('Unexpected action');
end;
您需要使用两个操作,例如,您的两个按钮将具有不同的标题。
对于这个特定的例子,分享OnExecute
事件处理程序是否值得,这有点没有实际意义。如果您有不同的事件处理程序,如下所示:
procedure TMainForm.acShowForm1Execute(Sender: TAction);
begin
Form1.Show;
end;
procedure TMainForm.acShowForm2Execute(Sender: TAction);
begin
Form2.Show;
end;
然后,如果你需要在事件处理程序中做额外的工作,那么余额会以另一种方式提示:
procedure TMainForm.acShowFormExecute(Sender: TAction);
var
FormClass: TMyChildFormClass;
Form: TTMyChildForm;
begin
if Sender=acShowForm1 then
FormClass := TForm1
else if Sender=acShowForm2 then
FormClass := TForm2
else
raise ESomeInternalExceptionClass.Create('Unexpected action');
Form := FormClass.Create(GetParam1, GetParam2);
try
Form.ShowModal;
finally
Form.Free;
end;
end;
几乎只要事件处理程序的主体包含多个内容,那么我就说有必要共享代码。