2011-12-28 28 views
0

IM上有許多使用動作管理行動(超過50個)德爾菲7應用程序的工作。 並跟蹤每一個動作,我有現在..as我有如果其他如下面的代碼..使用「情況」,而不是「如果其他」在行動經理操作

procedure TMainForm.OnActionExecute(Sender: TObject); 
    var 
      Action : TBasicAction; 
    begin 
      Action := Sender as TBasicAction; 
      if (Action is TAction) and not TAction(Action).Enabled then exit; 
      if Action = SQLQueryAction then 
      begin 
      //do somthing 
      end 
     else if (Action = NewSurveyAction) then 
      begin 
      //do somthing 
      end 
     else if ... 
     .. 
     .. 
     //lots of actions with if else latr.. 


    end;// of OnActionExecute.... 

任何一個可以告訴我

  1. 如何使用「案」

    case actions of 
         SQLQueryAction : //do somthing; 
         newsurveyaction : //do somthing; 
    
         //lots more actions to go.. 
    
        end; //of case. 
    
+7

可能有其他原因,你的設置,但你也可以指定OnExecute每一個人的行動和跳躍的情況下聲明在一起。如果多個動作需要相同的執行,他們可以共享相同的事件處理程序。我曾參與過一個項目,該項目使用梅森的標籤方法,並且很難追蹤每件事物是如何聯繫起來的。我們現在使用單獨的OnExecute處理程序執行每個操作,並且只需單擊一次並跳至實際執行代碼即可。 – 2011-12-28 07:09:15

+0

@MarkElder ...是的,我試過了,就像你說的「它更好」..我同意跳到真正的執行代碼更好..但因爲我有很多行動(50+),我想把他們放在一個地方(單一程序)來追蹤他們。 – PresleyDias 2011-12-28 07:50:21

+1

我可以理解這種動機。每當我們需要驗證或創建一個我們需要以下內容的操作時,發生了什麼事情。 1)打開動作並查看Tag屬性以查看分配的編號。 2)轉到常量文件並搜索該數字以查找常數名稱3)在主要case語句中搜索該常量名稱4)跳轉到case語句中調用的函數。最後,我們沒有用主功能保存任何內容 - 尤其是因爲無論如何,所有事情都以自己的功能結束。它最終變得更容易出錯。 (我有~150個動作) – 2011-12-28 08:31:52

回答

5

您無法在非序號類型上使用案例。但是,每個操作都有一個包含整數的Tag屬性。如果您分配的每個動作映射到一個固定的標記,你可以做這樣的事情:

case action.tag of 
    SQL_QUERY_TAG: //do something 
    NEW_SURVEY_TAG: //do something 
    //etc 
end; 
+0

@manson它的作品。謝謝 – PresleyDias 2011-12-28 06:53:45

相關問題