1
由DRY原则引导,这是在Delphi中用一个动作显示两个子形式的最佳方式。 我的父窗体有两个用于两个子窗体的按钮。我在TActionList中添加了OnExecute事件。儿童形式的这两个按钮的最佳方式是使用一个动作来打开它们。在Delphi中用一个动作显示两种形式的最佳方式
由DRY原则引导,这是在Delphi中用一个动作显示两个子形式的最佳方式。 我的父窗体有两个用于两个子窗体的按钮。我在TActionList中添加了OnExecute事件。儿童形式的这两个按钮的最佳方式是使用一个动作来打开它们。在Delphi中用一个动作显示两种形式的最佳方式
我会使用共享相同的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;
差不多只要事件处理程序的主体由多个单独的班轮组成,那么我认为值得分享代码。
谢谢你的回答。如果您将操作标题属性保留为空并仅修改按钮标题,则可以为按钮设置1个操作和2个不同的标题。 –
这很有趣,我不知道。当然,那你就不能歧视! –
设置操作后,您可以修改按钮标题,而不管标题是否为空白。但是这违背了行动的追求。它有更重要的属性。 – kobik