использование 'case' вместо 'If else' для действий в диспетчере действий - PullRequest
0 голосов
/ 28 декабря 2011

я работаю над delph 7 приложением, которое имеет множество действий (более 50) с помощью диспетчера действий. и для отслеживания каждого действия, которое у меня есть .. как сейчас у меня есть , если еще , как в следующем коде ..

 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' like

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

1 Ответ

5 голосов
/ 28 декабря 2011

Нельзя использовать case для неординарного типа. Однако каждое действие имеет свойство Tag, которое содержит целое число. Если вы назначаете каждому действию тег, который отображается на константу, вы можете сделать что-то вроде этого:

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