如果不想使用.net的webparts里的向导控件,可以自己设计一个简单的。我设计一个简单的向导框架,思路是这样的:
1. 首先会有一个向导类,我把它叫Navigation, 向导类有一个容器,里面包括本次向导中所有窗体。向导提供了向导框架中所有核心功能,比如:start, next step,previous step, finish。
2. 设计一个窗体基类,暂且叫BaseForm.所有向导窗体都继承这个基类,基类必须预留一些钩子(在C#语言中可以设计为virtual或者abstract,c++可为virtual),让各个派生的子类窗体去执行具体的窗体逻辑。比如:需要更新窗体title,处理业务逻辑等操作,另外,该窗口包含了一些向导控件(Next ,Previou,Finish,Cancel)。最后,必须把Navigation与窗体基类做关联。
3. 把所有向导窗体继续自BaseForm,并实现基类的钩子方法。
下面是用C#写的主要框架代码:
public class Navigation { public List<BaseForm> container; public int currentIndex; public void Start() {currentIndex = 0; container[currentIndex].Show();} public void Finish() {currentIndex = container.Count-1;} public void Next(); public void Previous(); public Navigation() { currentIndex = 0; container = new List<BaseForm>(); } public void InitNavContainer() { // TODO: Add your wizard forms step by step container.Add(.....) } public int IsHeadForm() { return (currentIndex == 0); } public int IsTailForm() { return (currentIndex == container.Count - 1); } }
下面是窗体基类:
1: public class BaseForm : Form
2: {
3: public abstract void DoSomething();
4: public Button btnNext;
5: public Button btnPrevious;
6: public Button btnFinish;
7: public Button btnCancel;
8:
9: public Navigation navigation;
10:
11: public BaseForm(Navigation _navigation)
12: {
13: navigation = _navigation;
14: }
15:
16: public void OnNext()
17: {
18: navigation.Next();
19: }
20:
21: ........
22: }
子窗体代码很简单,所以代码都是直接写的,没有经过编译器compile过。 c# sucks.