a simple navigation framework

  如果不想使用.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.

posted @ 2011-11-25 23:22  Repository  阅读(438)  评论(0编辑  收藏  举报