(工作中需要用到Wizard,找了一圈发现.NET居然没有提供现成的方便的实现,在找到的资料里,这篇文档提供的方案相对来说是可靠且使用简单)
目标
1、以类似MFC的方式创建Wizard
2、用类似设计对话框的方式设计每一页
这篇文章提供了两个类用于创建Wizard,另外有两个类用于创建Wizard97风格
主要的类
WizardForm和WizardPage类似CPropertySheet和CPropertyPage
WizardForm
WizardForm派生自Form,它负责管理WizardPage集合。另外,它提供了缺省的Wizard界面。它的主要方法如下:
public void SetFinishText( string ) | 设置Finish按钮的文字 |
public void SetWizardButtons( WizardButtons ) | 启用或者禁用向导按钮 |
创建你自己的向导类的第一件事就是扩展这个类,通常从该类继承,编辑属性或者添加额外的按钮。
WizardPage
WizardPage派生自UserControl。提供了向导相关的方法,如 OnSetActive, OnWizardNext等。它的主要方法如下:
protected WizardForm Wizard { get; } | 获得当前页所属的 WizardForm |
protected internal virtual bool OnKillActive() | 该函数在当前页失去焦点时被调用,可以在此处做数据校验 |
protected internal virtual bool OnSetActive() | 该函数在当前页获得焦点时被调用 |
protected internal virtual string OnWizardBack() | 当点击Back按钮时被调用。Return WizardForm.DefaultPage to advance to the previous page, WizardForm.NoPageChange to prevent the page from changing, or the value of the Name property of the page to be displayed. |
protected internal virtual string OnWizardNext() | 当Next按钮被点击时调用。Return WizardForm.DefaultPage to advance to the next page, WizardForm.NoPageChange to prevent the page from changing, or the value of the Name property of the page to be displayed. |
protected internal virtual bool OnWizardFinish() | 当Finish按钮被点击时调用。如果返回true则关闭向导,反之阻止关闭 |
一旦你对 WizardForm 的定制完成,你可以创建一个或多个 WizardPage 的派生类。为了把这些page和wizard关联,把这些page加入相应WizardForm的Controls collection。
使用WizardForm 和 WizardPage
1、创建派生自WizardPage的类
2、创建派生自WiazardForm的类
3、添加Page,如下
Controls.AddRange( new Control[] {
new FirstPage(),
new SecondPage(),
new ThirdPage(),
new FourthPage()
} );