2017-01-18 25 views

回答

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; 

差不多隻要事件處理程序的主體由多個單獨的班輪組成,那麼我認爲值得分享代碼。

+0

謝謝你的回答。如果您將操作標題屬性保留爲空並僅修改按鈕標題,則可以爲按鈕設置1個操作和2個不同的標題。 –

+0

這很有趣,我不知道。當然,那你就不能歧視! –

+1

設置操作後,您可以修改按鈕標題,而不管標題是否爲空白。但是這違背了行動的追求。它有更重要的屬性。 – kobik