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