Free cookie consent management tool by TermsFeed Policy Generator

Changeset 8024


Ignore:
Timestamp:
06/18/12 10:10:11 (13 years ago)
Author:
spimming
Message:

#1807:

  • fire event when Cancel button clicked
  • support cancellation when generating experiments
  • fixed page sizes
  • plugin dependencies updated
Location:
branches/DataAnalysisService
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.ExperimentWizard/3.3/MediumAnalysisPage.Designer.cs

    r7912 r8024  
    2525    private void InitializeComponent() {
    2626      this.progressBar1 = new System.Windows.Forms.ProgressBar();
    27       this.label1 = new System.Windows.Forms.Label();
     27      this.lblProgress = new System.Windows.Forms.Label();
    2828      this.SuspendLayout();
    2929      //
    3030      // wizardBanner
    3131      //
     32      this.wizardBanner.Size = new System.Drawing.Size(640, 81);
    3233      this.wizardBanner.Subtitle = "Generating experiment ...";
    3334      this.wizardBanner.Title = "Medium Analysis";
     
    3536      // progressBar1
    3637      //
    37       this.progressBar1.Anchor = System.Windows.Forms.AnchorStyles.None;
    38       this.progressBar1.Location = new System.Drawing.Point(0, 143);
     38      this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
     39      this.progressBar1.Location = new System.Drawing.Point(30, 263);
    3940      this.progressBar1.Name = "progressBar1";
    40       this.progressBar1.Size = new System.Drawing.Size(320, 23);
     41      this.progressBar1.Size = new System.Drawing.Size(580, 23);
    4142      this.progressBar1.TabIndex = 2;
    4243      //
    43       // label1
     44      // lblProgress
    4445      //
    45       this.label1.AutoSize = true;
    46       this.label1.Location = new System.Drawing.Point(0, 124);
    47       this.label1.Name = "label1";
    48       this.label1.Size = new System.Drawing.Size(35, 13);
    49       this.label1.TabIndex = 3;
    50       this.label1.Text = "label1";
     46      this.lblProgress.Anchor = System.Windows.Forms.AnchorStyles.Left;
     47      this.lblProgress.AutoSize = true;
     48      this.lblProgress.Location = new System.Drawing.Point(27, 230);
     49      this.lblProgress.Name = "lblProgress";
     50      this.lblProgress.Size = new System.Drawing.Size(125, 13);
     51      this.lblProgress.TabIndex = 3;
     52      this.lblProgress.Text = "Generating experiment ...";
    5153      //
    5254      // MediumAnalysisPage
    5355      //
    5456      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    55       this.Controls.Add(this.label1);
    5657      this.Controls.Add(this.progressBar1);
     58      this.Controls.Add(this.lblProgress);
    5759      this.Name = "MediumAnalysisPage";
     60      this.Size = new System.Drawing.Size(640, 480);
    5861      this.SetActive += new System.ComponentModel.CancelEventHandler(this.MediumAnalysisPage_SetActive);
     62      this.WizardCancel += new System.ComponentModel.CancelEventHandler(this.MediumAnalysisPage_WizardCancel);
    5963      this.WizardBack += new HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.WizardPageEventHandler(this.MediumAnalysisPage_WizardBack);
     64      this.Controls.SetChildIndex(this.lblProgress, 0);
    6065      this.Controls.SetChildIndex(this.progressBar1, 0);
    61       this.Controls.SetChildIndex(this.label1, 0);
    6266      this.Controls.SetChildIndex(this.wizardBanner, 0);
    6367      this.ResumeLayout(false);
     
    6973
    7074    private System.Windows.Forms.ProgressBar progressBar1;
    71     private System.Windows.Forms.Label label1;
     75    private System.Windows.Forms.Label lblProgress;
    7276
    7377  }
  • branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.ExperimentWizard/3.3/MediumAnalysisPage.cs

    r7944 r8024  
    11
     2using System;
    23using System.ComponentModel;
    34using System.Linq;
     5using System.Windows.Forms;
    46using HeuristicLab.Algorithms.DataAnalysis;
    57using HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm;
     
    3234      worker.WorkerReportsProgress = true;
    3335      worker.ProgressChanged += new ProgressChangedEventHandler(WorkerProgressChanged);
    34 
     36      worker.WorkerSupportsCancellation = true;
    3537    }
    3638
     
    3840      DataAnalysisWizardContext c = e.Argument as DataAnalysisWizardContext;
    3941      IProblem problem = c.Problem;
     42      if (worker.CancellationPending) {
     43        e.Cancel = true;
     44      } else {
     45        lblProgress.Invoke(new Action(() => { lblProgress.Text = "Generating Support Vector Regression Experiment ..."; }));
     46      }
    4047
    4148      // SVR Experiment -------------------------------------------------------
    42       //SupportVectorRegression svr = new SupportVectorRegression();
    43       //svr.Problem = (IRegressionProblem)problem;
    44       //ParameterConfigurationTree vc = new ParameterConfigurationTree(svr, problem);
    45 
    46       //var nuRange = new DoubleValueRange(new DoubleValue(0.1), new DoubleValue(0.9), new DoubleValue(0.1));
    47       //SetParameterRangeContraint(vc, "Nu", nuRange);
    48 
    49       //var costRange = new DoubleValueFactorRange(new DoubleValue(0.03125), new DoubleValue(32768), new DoubleValue(4));
    50       //SetParameterRangeContraint(vc, "Cost", costRange);
    51 
    52       //var gammaRange = new DoubleValueFactorRange(new DoubleValue(6.10352E-05), new DoubleValue(64), new DoubleValue(4));
    53       //SetParameterRangeContraint(vc, "Gamma", gammaRange);
    54       //worker.ReportProgress(5);
    55       //Experiment svrExperiment = vc.GenerateExperiment(svr);
    56       // ======================================================================
    57       worker.ReportProgress(20);
     49      //Experiment svrExperiment = null;
     50      //if (!e.Cancel) {
     51      //  SupportVectorRegression svr = new SupportVectorRegression();
     52      //  svr.Problem = (IRegressionProblem)problem;
     53      //  ParameterConfigurationTree vc = new ParameterConfigurationTree(svr, problem);
     54
     55      //  var nuRange = new DoubleValueRange(new DoubleValue(0.1), new DoubleValue(0.9), new DoubleValue(0.1));
     56      //  SetParameterRangeContraint(vc, "Nu", nuRange);
     57
     58      //  var costRange = new DoubleValueFactorRange(new DoubleValue(0.03125), new DoubleValue(32768), new DoubleValue(4));
     59      //  SetParameterRangeContraint(vc, "Cost", costRange);
     60
     61      //  var gammaRange = new DoubleValueFactorRange(new DoubleValue(6.10352E-05), new DoubleValue(64), new DoubleValue(4));
     62      //  SetParameterRangeContraint(vc, "Gamma", gammaRange);
     63      //  worker.ReportProgress(5);
     64      //  svrExperiment = vc.GenerateExperiment(svr);
     65      //}
     66      // ======================================================================
     67
     68      if (worker.CancellationPending) {
     69        e.Cancel = true;
     70      } else {
     71        worker.ReportProgress(20);
     72        lblProgress.Invoke(new Action(() => { lblProgress.Text = "Generating Random Forest Regression Experiment ..."; }));
     73      }
     74
    5875
    5976      // RF Experiment --------------------------------------------------------
    60       //RandomForestRegression rfr = new RandomForestRegression();
    61       //rfr.Problem = (IRegressionProblem)problem;
    62       //ParameterConfigurationTree rfConfig = new ParameterConfigurationTree(rfr, problem);
    63       //var rRange = new DoubleValueRange(new DoubleValue(0.1), new DoubleValue(0.7), new DoubleValue(0.1));
    64       //SetParameterRangeContraint(rfConfig, "R", rRange);
    65       //var treeRange = new IntValueRange(new IntValue(250), new IntValue(250), new IntValue(250));
    66       //SetParameterRangeContraint(rfConfig, "Number of trees", treeRange);
    67       //Experiment rfrExperiment = rfConfig.GenerateExperiment(rfr);
    68       // ======================================================================
    69       worker.ReportProgress(40);
     77      //Experiment rfrExperiment = null;
     78      //if (!e.Cancel) {
     79      //  RandomForestRegression rfr = new RandomForestRegression();
     80      //  rfr.Problem = (IRegressionProblem)problem;
     81      //  ParameterConfigurationTree rfConfig = new ParameterConfigurationTree(rfr, problem);
     82      //  var rRange = new DoubleValueRange(new DoubleValue(0.1), new DoubleValue(0.7), new DoubleValue(0.1));
     83      //  SetParameterRangeContraint(rfConfig, "R", rRange);
     84      //  var treeRange = new IntValueRange(new IntValue(250), new IntValue(250), new IntValue(250));
     85      //  SetParameterRangeContraint(rfConfig, "Number of trees", treeRange);
     86      //  rfrExperiment = rfConfig.GenerateExperiment(rfr);
     87      //}
     88      // ======================================================================
     89
     90      if (worker.CancellationPending) {
     91        e.Cancel = true;
     92      } else {
     93        worker.ReportProgress(40);
     94        lblProgress.Invoke(new Action(() => { lblProgress.Text = "Generating Neural Network Regression Experiment ..."; }));
     95      }
     96
     97
    7098      // NN Experiment --------------------------------------------------------
    71       //NeuralNetworkRegression nnr = new NeuralNetworkRegression();
    72       //nnr.Problem = (IRegressionProblem)problem;
    73       //ParameterConfigurationTree nnrConfig = new ParameterConfigurationTree(nnr, problem);
    74       //var decayRange = new DoubleValueFactorRange(new DoubleValue(0.001), new DoubleValue(100), new DoubleValue(10));
    75       //SetParameterRangeContraint(nnrConfig, "Decay", decayRange);
    76       //var nodesRange = new IntValueFactorRange(new IntValue(1), new IntValue(100), new IntValue(3));
    77       //SetParameterRangeContraint(nnrConfig, "NodesInFirstHiddenLayer", nodesRange);
    78       //Experiment nnrExperiment = nnrConfig.GenerateExperiment(nnr);
    79       // ======================================================================
    80       worker.ReportProgress(60);
     99      //Experiment nnrExperiment = null;
     100      //if (!e.Cancel) {
     101      //  NeuralNetworkRegression nnr = new NeuralNetworkRegression();
     102      //  nnr.Problem = (IRegressionProblem)problem;
     103      //  ParameterConfigurationTree nnrConfig = new ParameterConfigurationTree(nnr, problem);
     104      //  var decayRange = new DoubleValueFactorRange(new DoubleValue(0.001), new DoubleValue(100), new DoubleValue(10));
     105      //  SetParameterRangeContraint(nnrConfig, "Decay", decayRange);
     106      //  var nodesRange = new IntValueFactorRange(new IntValue(1), new IntValue(100), new IntValue(3));
     107      //  SetParameterRangeContraint(nnrConfig, "NodesInFirstHiddenLayer", nodesRange);
     108      //  nnrExperiment = nnrConfig.GenerateExperiment(nnr);
     109      //}
     110      // ======================================================================
     111
     112      if (worker.CancellationPending) {
     113        e.Cancel = true;
     114      } else {
     115        worker.ReportProgress(60);
     116        lblProgress.Invoke(new Action(() => { lblProgress.Text = "Generating Offspring Selection Genetic Algorithm Experiment ..."; }));
     117      }
     118
    81119      // GP Experiment --------------------------------------------------------
    82       OffspringSelectionGeneticAlgorithm osga = new OffspringSelectionGeneticAlgorithm();
    83       var prob = new SymbolicRegressionSingleObjectiveProblem();
    84       prob.ProblemData = ((IRegressionProblem)problem).ProblemData;
    85       //prob.SolutionCreator = new MultiSymbolicDataAnalysisExpressionCreator();
    86       osga.Problem = prob;
    87       osga.ComparisonFactorLowerBound.Value = 1;
    88       osga.Crossover = osga.Problem.Operators.OfType<ICrossover>().FirstOrDefault(x => x.Name == gaCrossover);
    89       osga.MaximumEvaluatedSolutions.Value = 500000;
    90       osga.MaximumGenerations.Value = 100;
    91       osga.MutationProbability = new PercentValue(0.15);
    92       osga.Mutator = osga.Problem.Operators.OfType<IManipulator>().FirstOrDefault(x => x.Name == gaMutator);
    93       osga.PopulationSize.Value = 500;
    94       osga.Selector = osga.SelectorParameter.ValidValues.FirstOrDefault(x => x.Name == gaSelector);
    95 
    96       CrossValidation crossSmall = new CrossValidation();
    97       crossSmall.Algorithm = osga;
    98       BatchRun batchSmall = new BatchRun("small");
    99       batchSmall.Repetitions = nrOfRepetitions;
    100       batchSmall.Optimizer = crossSmall;
    101 
    102       CrossValidation crossMedium = (CrossValidation)crossSmall.Clone(new Cloner());
    103       var probMedium = (SymbolicRegressionSingleObjectiveProblem)prob.Clone(new Cloner());
    104       probMedium.MaximumSymbolicExpressionTreeDepth.Value = 12;
    105       probMedium.MaximumSymbolicExpressionTreeLength.Value = 125;
    106       crossMedium.Algorithm.Problem = probMedium;
    107       BatchRun batchMedium = new BatchRun("medium");
    108       batchMedium.Repetitions = nrOfRepetitions;
    109       batchMedium.Optimizer = crossMedium;
    110 
    111       CrossValidation crossLarge = (CrossValidation)crossSmall.Clone(new Cloner());
    112       var probLarge = (SymbolicRegressionSingleObjectiveProblem)prob.Clone(new Cloner());
    113       probLarge.MaximumSymbolicExpressionTreeDepth.Value = 17;
    114       probLarge.MaximumSymbolicExpressionTreeLength.Value = 250;
    115       crossLarge.Algorithm.Problem = probLarge;
    116       BatchRun batchLarge = new BatchRun("large");
    117       batchLarge.Repetitions = nrOfRepetitions;
    118       batchLarge.Optimizer = crossLarge;
    119 
    120120      Experiment gpExperiment = new Experiment();
    121       gpExperiment.Optimizers.Add(batchSmall);
    122       gpExperiment.Optimizers.Add(batchMedium);
    123       gpExperiment.Optimizers.Add(batchLarge);
    124       // ======================================================================
    125       worker.ReportProgress(80);
     121      if (!e.Cancel) {
     122        OffspringSelectionGeneticAlgorithm osga = new OffspringSelectionGeneticAlgorithm();
     123        var prob = new SymbolicRegressionSingleObjectiveProblem();
     124        prob.ProblemData = ((IRegressionProblem)problem).ProblemData;
     125        //prob.SolutionCreator = new MultiSymbolicDataAnalysisExpressionCreator();
     126        osga.Problem = prob;
     127        osga.ComparisonFactorLowerBound.Value = 1;
     128        osga.Crossover = osga.Problem.Operators.OfType<ICrossover>().FirstOrDefault(x => x.Name == gaCrossover);
     129        osga.MaximumEvaluatedSolutions.Value = 500000;
     130        osga.MaximumGenerations.Value = 100;
     131        osga.MutationProbability = new PercentValue(0.15);
     132        osga.Mutator = osga.Problem.Operators.OfType<IManipulator>().FirstOrDefault(x => x.Name == gaMutator);
     133        osga.PopulationSize.Value = 500;
     134        osga.Selector = osga.SelectorParameter.ValidValues.FirstOrDefault(x => x.Name == gaSelector);
     135
     136        CrossValidation crossSmall = new CrossValidation();
     137        crossSmall.Algorithm = osga;
     138        BatchRun batchSmall = new BatchRun("small");
     139        batchSmall.Repetitions = nrOfRepetitions;
     140        batchSmall.Optimizer = crossSmall;
     141
     142        CrossValidation crossMedium = (CrossValidation)crossSmall.Clone(new Cloner());
     143        var probMedium = (SymbolicRegressionSingleObjectiveProblem)prob.Clone(new Cloner());
     144        probMedium.MaximumSymbolicExpressionTreeDepth.Value = 12;
     145        probMedium.MaximumSymbolicExpressionTreeLength.Value = 125;
     146        crossMedium.Algorithm.Problem = probMedium;
     147        BatchRun batchMedium = new BatchRun("medium");
     148        batchMedium.Repetitions = nrOfRepetitions;
     149        batchMedium.Optimizer = crossMedium;
     150
     151        CrossValidation crossLarge = (CrossValidation)crossSmall.Clone(new Cloner());
     152        var probLarge = (SymbolicRegressionSingleObjectiveProblem)prob.Clone(new Cloner());
     153        probLarge.MaximumSymbolicExpressionTreeDepth.Value = 17;
     154        probLarge.MaximumSymbolicExpressionTreeLength.Value = 250;
     155        crossLarge.Algorithm.Problem = probLarge;
     156        BatchRun batchLarge = new BatchRun("large");
     157        batchLarge.Repetitions = nrOfRepetitions;
     158        batchLarge.Optimizer = crossLarge;
     159
     160        //Experiment gpExperiment = new Experiment();
     161        gpExperiment.Optimizers.Add(batchSmall);
     162        gpExperiment.Optimizers.Add(batchMedium);
     163        gpExperiment.Optimizers.Add(batchLarge);
     164      }
     165      // ======================================================================
     166      if (worker.CancellationPending) {
     167        e.Cancel = true;
     168      } else {
     169        worker.ReportProgress(80);
     170        lblProgress.Invoke(new Action(() => { lblProgress.Text = "Packing Data Analysis Experiment ..."; }));
     171      }
    126172
    127173      Experiment experiment = new Experiment("Data Analysis Experiment");
    128       //experiment.Optimizers.Add(svrExperiment);
    129       //experiment.Optimizers.Add(rfrExperiment);
    130       //experiment.Optimizers.Add(nnrExperiment);
    131       experiment.Optimizers.Add(gpExperiment);
    132 
    133       worker.ReportProgress(100);
     174      if (!e.Cancel) {
     175        //Experiment experiment = new Experiment("Data Analysis Experiment");
     176        //experiment.Optimizers.Add(svrExperiment);
     177        //experiment.Optimizers.Add(rfrExperiment);
     178        //experiment.Optimizers.Add(nnrExperiment);
     179        experiment.Optimizers.Add(gpExperiment);
     180      }
     181
     182      if (worker.CancellationPending) {
     183        e.Cancel = true;
     184      } else {
     185        worker.ReportProgress(100);
     186        lblProgress.Invoke(new Action(() => { lblProgress.Text = "Experiment generation completed"; }));
     187      }
    134188
    135189      e.Result = experiment;
     
    150204
    151205    private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
    152       SetWizardButton(Wizard.WizardButtons.Next);
    153       Experiment experiment = (Experiment)e.Result;
    154       context.Experiment = experiment;
     206      if (e.Error != null) {
     207        SetWizardButton(Wizard.WizardButtons.Back);
     208        MessageBox.Show(e.Error.Message, "Error occurred while generating experiments", MessageBoxButtons.OK, MessageBoxIcon.Error);
     209      } else if (e.Cancelled) {
     210        // nothing to do here ...
     211      } else {
     212        SetWizardButton(Wizard.WizardButtons.Next);
     213        Experiment experiment = (Experiment)e.Result;
     214        context.Experiment = experiment;
     215      }
    155216    }
    156217
     
    163224      worker.RunWorkerAsync(context);
    164225    }
     226
     227    private void MediumAnalysisPage_WizardCancel(object sender, CancelEventArgs e) {
     228      worker.CancelAsync();
     229    }
    165230  }
    166231}
  • branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.ExperimentWizard/3.3/Plugin.cs.frame

    r7953 r8024  
    3232  [PluginDependency("HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm", "3.3")]
    3333  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
    34   [PluginDependency("HeuristicLab.Clients.HiveJobManager", "3.3")]
     34  [PluginDependency("HeuristicLab.Clients.Hive.JobManager", "3.3")]
    3535  [PluginDependency("HeuristicLab.Collections", "3.3")]
    3636  [PluginDependency("HeuristicLab.Common", "3.3")]
     
    5454  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
    5555  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
    56   [PluginDependency("HeuristicLab.Problems.DataAnalysis.Regression", "3.4")]
     56  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")]
    5757  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Views", "3.4")]
    5858  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
  • branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.ExperimentWizard/3.3/TargetVariablePage.Designer.cs

    r7953 r8024  
    3232      // wizardBanner
    3333      //
    34       this.wizardBanner.Size = new System.Drawing.Size(471, 81);
     34      this.wizardBanner.Size = new System.Drawing.Size(640, 81);
    3535      this.wizardBanner.Subtitle = "Select the solumn which describes the expected output values.";
    3636      this.wizardBanner.Title = "Target Variable";
     
    4848      this.stringConvertibleMatrixView.ShowRowsAndColumnsTextBox = true;
    4949      this.stringConvertibleMatrixView.ShowStatisticalInformation = true;
    50       this.stringConvertibleMatrixView.Size = new System.Drawing.Size(462, 168);
     50      this.stringConvertibleMatrixView.Size = new System.Drawing.Size(631, 337);
    5151      this.stringConvertibleMatrixView.TabIndex = 1;
    5252      //
     
    6868      this.cmbTargetVariable.Location = new System.Drawing.Point(119, 88);
    6969      this.cmbTargetVariable.Name = "cmbTargetVariable";
    70       this.cmbTargetVariable.Size = new System.Drawing.Size(349, 21);
     70      this.cmbTargetVariable.Size = new System.Drawing.Size(518, 21);
    7171      this.cmbTargetVariable.TabIndex = 3;
    7272      //
     
    8080      this.label2.Text = "Preview data:";
    8181      //
    82       // ProblemDataViewPage
     82      // TargetVariablePage
    8383      //
    8484      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
     
    8787      this.Controls.Add(this.label1);
    8888      this.Controls.Add(this.stringConvertibleMatrixView);
    89       this.Name = "ProblemDataViewPage";
    90       this.Size = new System.Drawing.Size(471, 311);
     89      this.Name = "TargetVariablePage";
     90      this.Size = new System.Drawing.Size(640, 480);
    9191      this.SetActive += new System.ComponentModel.CancelEventHandler(this.ProblemDataViewPage_SetActive);
    9292      this.WizardNext += new HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.WizardPageEventHandler(this.ProblemDataViewPage_WizardNext);
  • branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardBase.cs

    r7824 r8024  
    170170
    171171    private void btnCancel_Click(object sender, EventArgs e) {
    172       DialogResult = DialogResult.Cancel;
    173       Close();
     172      CancelEventArgs cea = new CancelEventArgs();
     173      cea.Cancel = true;
     174      ActivePage.OnWizardCancel(cea);
     175      if (cea.Cancel) {
     176        DialogResult = DialogResult.Cancel;
     177        Close();
     178      }
    174179    }
    175180
  • branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.cs

    r7808 r8024  
    3939    }
    4040
     41    public event CancelEventHandler WizardCancel;
     42    public virtual void OnWizardCancel(CancelEventArgs e) {
     43      if (WizardCancel != null)
     44        WizardCancel(this, e);
     45    }
     46
    4147    public event WizardPageEventHandler WizardNext;
    4248    public virtual void OnWizardNext(WizardPageEventArgs e) {
Note: See TracChangeset for help on using the changeset viewer.