2012-03-30 2 views
3

C# Мастер управления имеет событие ActiveStepChanged, которое запускается при перемещении по шагам мастера. Текущий шаг хранится в свойстве ActiveStepIndex. Мне нужно получить шаг, непосредственно предшествующий текущему ActiveStepIndex.Получить последний шаг мастера компонентов

Я пытаюсь таким образом, но без результатов до сих пор:

ICollection s = wizTransferSheet.GetHistory(); 
IList steps = s as IList; 
WizardStep lastStep = steps[steps.Count].Name; 

ответ

4

В зависимости от того, насколько сложным ваш волшебник, который может быть сложно иногда. Вы не всегда можете использовать ActiveStepIndex. К счастью, управление мастер записывает историю шагов посещенных, и вы можете использовать это, чтобы получить последний шаг, который посетил:

Вы можете использовать эту функцию, чтобы получить последний шаг, который посетили:

/// <summary> 
/// Gets the last wizard step visited. 
/// </summary> 
/// <returns></returns> 
private WizardStep GetLastStepVisited() 
{ 
    //initialize a wizard step and default it to null 
    WizardStep previousStep = null; 

    //get the wizard navigation history and set the previous step to the first item 
    var wizardHistoryList = (ArrayList)wzServiceOrder.GetHistory(); 
    if (wizardHistoryList.Count > 0) 
     previousStep = (WizardStep)wizardHistoryList[0]; 

    //return the previous step 
    return previousStep; 
} 

Вот пример кода от одного из наших волшебников. Мастер довольно сложный, и существует много потенциальных ветвлений, основанных на том, что делает пользователь. Из-за этого ветвления, перемещение мастера может быть проблемой. Я не знаю, будет ли это полезно для вас, но я подумал, что это стоит того, чтобы это было на всякий случай.

/// <summary> 
/// Navigates the wizard to the appropriate step depending on certain conditions. 
/// </summary> 
/// <param name="currentStep">The active wizard step.</param> 
private void NavigateToNextStep(WizardStepBase currentStep) 
{ 
    //get the wizard navigation history and cast the collection as an array list 
    var wizardHistoryList = (ArrayList)wzServiceOrder.GetHistory(); 

    if (wizardHistoryList.Count > 0) 
    { 
     var previousStep = wizardHistoryList[0] as WizardStep; 
     if (previousStep != null) 
     { 
      //determine which direction the wizard is moving so we can navigate to the correct step 
      var stepForward = wzServiceOrder.WizardSteps.IndexOf(previousStep) < wzServiceOrder.WizardSteps.IndexOf(currentStep); 

      if (currentStep == wsViewRecentWorkOrders) 
      { 
       //if there are no work orders for this site then skip the recent work orders step 
       if (grdWorkOrders.Items.Count == 0) 
        wzServiceOrder.MoveTo(stepForward ? wsServiceDetail : wsSiteInformation); 
      } 
      else if (currentStep == wsExtensionDates) 
      { 
       //if no work order is selected then bypass the extension setup step 
       if (grdWorkOrders.SelectedItems.Count == 0) 
        wzServiceOrder.MoveTo(stepForward ? wsServiceDetail : wsViewRecentWorkOrders); 
      } 
      else if (currentStep == wsSchedule) 
      { 
       //if a work order is selected then bypass the scheduling step 
       if (grdWorkOrders.SelectedItems.Count > 0) 
        wzServiceOrder.MoveTo(stepForward ? wsServicePreview : wsServiceDetail); 
      } 
     } 
    } 
} 
Смежные вопросы