C# 製作嚮導

聲明:本文根據網絡資料,改編而成
1.FormBase界面:有“幫助,上一步,下一步,取消”按鈕,這些按鈕放置在一個Panel上。

namespace DataBase

{

    public partial class FormBase : Form

    {

        public FormBase()

        {

            InitializeComponent(); 

        }

        public WizardController controller = null;

 

        #region 函數

        /// <summary>

        /// 自定義函數

        /// </summary>

        public void DisableButton()

        {

            if (this.controller == null)

                return;

            if (this.controller.IsFirstForm)

            {

                this.buttonPrev.Enabled = false;

            }

            else

            {

                this.buttonPrev.Enabled = true;

            }

            if (this.controller.IsLastForm) //如果是嚮導的最後一個頁面,顯示“完成”

            {

                this.buttonNext.Text = "完成";

            }

            else    //否則顯示“下一步”

            {

                this.buttonNext.Text = "下一步";

            }

        }

        protected virtual void UpdateInfo()  //由“每一步FormStep1FormStep2…”的界面 具體實現

        {

 

        }

        protected virtual void GoNext()

        {

            UpdateInfo();

            if (this.controller.IsLastForm) //如果是嚮導的最後一個頁面,則調用“FinishWizard()

            {

                controller.FinishWizard();

                this.Visible = false;

            }

            else//如果是嚮導的最後一個頁面,則調用“GoNext()

            {

                controller.GoNext();

            }

        }

        protected virtual void GoPrev()

        {

            UpdateInfo();

            controller.GoPrev();

        }

        //protected virtual void Finish()

        //{

        //    UpdateInfo();

        //    controller.FinishWizard();

        //    this.Visible = false;

        //}

        protected virtual void Cancel()

        {

            this.controller.info = null;

            this.Close();

        }

        #endregion

 

        #region 界面控件事件

        /// <summary>

        /// 界面控件事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void buttonPrev_Click(object sender, EventArgs e)

        {

            GoPrev();

        }

        private void buttonNext_Click(object sender, EventArgs e)

        {

            GoNext();

        }

 

        //private void buttonFinish_Click(object sender, EventArgs e)

        //{

        //    Finish();

        //}

        private void buttonCancel_Click(object sender, EventArgs e)

        {

            Cancel();

        }

        #endregion   

    }

}

 

2.一個WizardController.cs文件(非界面)

namespace DataBase

{

    public class WizardController

    {

        private ArrayList WizardForms = new ArrayList();

        private int curIndex = 0;

 

        #region 構造函數

        /// <summary>

        ///構造函數

        /// </summary>

        public WizardController()

        {

            WizardForms.Add(new FormStep1()); //frmStep1繼承自FormBase

            WizardForms.Add(new FormStep2());

            WizardForms.Add(new FormStep3());

            foreach (FormBase frm in WizardForms)

            {

                frm.controller = this;

                frm.DisableButton();

            }

        }

        #endregion

 

        #region 自定義函數

        /// <summary>

        /// 自定義函數

        /// </summary>

 

        public bool IsFirstForm //屬性

        {

            get { return curIndex == 0; }

        }

        public bool IsLastForm //屬性

        {

            get { return curIndex == this.WizardForms.Count - 1; }

        }

 

        public void GoNext()

        {

            if (curIndex + 1 < WizardForms.Count)

            {

                ((FormBase)WizardForms[curIndex]).Visible = false;

                curIndex++;

            }

            else

            {

                return;

            }

            ((FormBase)WizardForms[curIndex]).Show();

            ((FormBase)WizardForms[curIndex]).DisableButton();

        }

 

        public void GoPrev()

        {

            if (curIndex - 1 >= 0)

            {

                ((FormBase)WizardForms[curIndex]).Visible = false;

                curIndex--;

            }

            else

            {

                return;

            }

            ((FormBase)WizardForms[curIndex]).Show();

            ((FormBase)WizardForms[curIndex]).DisableButton();

        }

 

        public void BeginWizard()

        {

            ((FormBase)WizardForms[0]).Show();

            ((FormBase)WizardForms[curIndex]).DisableButton();

        }

 

        public void FinishWizard()

        {

            curIndex = 0;

            Dispose();

        }

 

        private void Dispose()

        {

            foreach (FormBase frm in WizardForms)

            {

                frm.Close();

            }

        }

        #endregion

    }

}

 

3. FormStep1界面繼承自FormBase,上面有一個Label控件,Text屬性“This is FormStep1

namespace DataBase

{

    public partial class FormStep1 : DataBase.FormBase

    {

        public FormStep1()

        {

            InitializeComponent();

        }

 

        protected override void UpdateInfo()

        {

            MessageBox.Show("第一步!","Step1",MessageBoxButtons.OK,MessageBoxIcon.Information);

        }

    }

}

 

4. FormStep2界面繼承自FormBase,上面有一個Label控件,Text屬性“This is FormStep2

namespace DataBase

{

    public partial class FormStep2 : DataBase.FormBase

    {

        public FormStep2()

        {

            InitializeComponent();

        }

 

        protected override void UpdateInfo()

        {

            MessageBox.Show("第二步!", "Step2", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

    }

}

 

5. FormStep3界面繼承自FormBase,上面有一個Label控件,Text屬性“This is FormStep3

namespace DataBase

{

    public partial class FormStep3 : DataBase.FormBase

    {

        public FormStep3()

        {

            InitializeComponent();

        }

        protected override void UpdateInfo()

        {

            MessageBox.Show("第三步!", "Step3", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

    }

}

6.FormTestWizard界面,上面一個buttonText屬性“啓動向導”

namespace DataBase

{

    public partial class FormTestWizard : Form

    {

        public FormTestWizard()

        {

            InitializeComponent();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            WizardController controller = new WizardController();

            controller.BeginWizard();

        }

    }

}

 

7.修改程序的啓動界面爲“FormTestWizard

namespace DataBase

{

    static class Program

    {

        /// <summary>

        /// 應用程序的主入口點。

        /// </summary>

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new FormTestWizard());  //啓動界面

        }

    }

}

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