技术开发 频道

WinForm简单步骤制作


【IT168技术文档】

  进行类似于上一步,下一步的操作,是比较常见的,在WebAppliction中自从2.0发布以后到是已经有类似控件可以操作了,不知道为什么在Winform中好象没有该控件(我没有确认过,不知道是否真的没有?)。所以没有办法,只好自己做了。

  问题:

  由于最近要做一个软件的升级程序,程序本身比较简单,无非是执行一些SQL语句,覆盖一些文件而已,但我想模仿安装程序一样,可以进行步骤操作,基本要求如下:

  1、具有上一步,下一步操作;

  2、进行上一步和下一步操作时,能够保持原有状态,如我已经在这一步骤中录入了一些数据,点击下一步后,发现需要退回来修改,这时点击上一步返回前一步骤,那原来录入的数据必须还在;

  其实需求很简单,这里主要是讲一下我的思路,从而希望大家能够提出自己的想法,进一步完善。

  解决方法:

  其实,对于winform来讲,没有多少经验,本人主要是从事webapplicatioin开发,这次为了做这个升级程序,也查询了一些资料,网上查到有一个,利用命令模式来操作步骤(忘记是看自哪里了)。本文里提到的解决方法根据这个演变而来,所有的步骤都是用用户控件来实现。好了不多说了,直接看代码吧:

  1、创建步骤基类
namespace EcsPatch.PatchWizard   {    public class BaseWizard : UserControl   {   }   }
  其实如果简单的话这个基类根本就不用创建,因为所有的用户控件,本身就继承自UserControl基类的。这里还要另写一个,主要是因为可能会有一些共用方法,为了便于重用,所以另外创建一个。

  2、所有的用户控件都继承1中创建的基类
namespace EcsPatch.PatchWizard   {     public partial class TipModel : BaseWizard     {       public TipModel()      {        InitializeComponent();      }     }   }
  其它步骤的用户控件也类似,不一一贴代码了。

  3、创建辅助类
namespace EcsPatch.Component   {    public class WizardUtil    {     private static Dictionary<WizardItem, BaseWizard> wizardList;      /// <summary>     /// 初始化步骤列表     /// </summary>      public WizardUtil()     {      wizardList = new Dictionary<WizardItem, BaseWizard>();      wizardList[WizardItem.Tip] = new TipModel();      wizardList[WizardItem.SelectPath] = new SelectPathModel();      wizardList[WizardItem.VersionTip] = new VersionTipModel();      wizardList[WizardItem.StartPatch] = new StartPatchModel();      wizardList[WizardItem.Complete] = new CompleteModel();     }      /// <summary>     /// 更新步骤信息     /// </summary>      /// <param name="key"></param>     /// <param name="wizard"></param>      public void SetWizard(WizardItem key, BaseWizard wizard)     {      wizardList[key] = wizard;     }     /// <summary>     /// 获取步骤信息     /// </summary>     /// <param name="key"></param>     /// <returns></returns>     public BaseWizard GetWizard(WizardItem key)     {      BaseWizard wizard = wizardList[key];       return wizard;      }     /// <summary>     /// 根据状态获取步骤信息     /// </summary>     /// <param name="key"></param>      /// <param name="state"></param>     /// <returns></returns>     public BaseWizard GetWizard(ref WizardItem key, WizardState state)     {       int position = (int)key;      if (state == WizardState.Next)      {       position++;      }      else      {       position--;      }      WizardItem current = (WizardItem)position;      key = current;      return GetWizard(current);     }   }   public enum WizardItem    {    Tip = 1,    SelectPath,    VersionTip,    StartPatch,    Complete   }   public enum WizardState   {    Next = 1,    Previous,   }  }
0
相关文章