C# Wizard功能实现

原地址:http://www.codeguru.com/csharp/csharp/cs_controls/wizards/article.php/c4799/A-Reusable-Wizard-Component.htm


工作中需要用到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()
		        } );


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章