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()  //由“每一步FormStep1,FormStep2…”的界面 具体实现

{

}

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());  //启动界面

}

}

}

时间: 2024-12-14 08:32:02

C# 制作向导的相关文章

安装包制作工具 SetupFactory 详解

Setup Factory 是一个强大的安装程序制作工具.提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序.可建立快捷方式,也可直接在 Windows 系统的注册表加入内容,还能在 Win.ini 和 System.ini 内加入设定值,更可以建立反安装选项等等.它内附的向导可以一步步的带领您做出漂亮又专业的安装程序. 本篇通过一个WinFrom项目制作安装包程序过程详细介绍其使用方法. 下面截图中使用的 SetupFactory版本为 V9.0.3. 0 汉化版.网

使用CocosSharp制作一个游戏 - CocosSharp中文教程

注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了GoneBananas项目代码后,对本教程进行了部分修改,但当前只涉及Android方面,iOS因没有环境验证代码,暂未修改. 本人博客地址:http://fengyu.name 原文链接:http://fengyu.name/?cat=game&id=295 相关资源: 离线PDF文档:Downloa

Navi.Soft30.产品.DataWindowNet.操作手册

1概述 1.1功能简介 Sybase公司的PowerBuilder开发工具,在以前VS工具没有成事以前,是相当风光的.微软都要与其合作,学习它Db方面的技术,才成就了SQLServer数据库.PB开发工具的风光得益于它非常强大的数据窗口功能,这个技术的使用,使得开发管理类软件,尤其是开发数据库管理类软件变得异常简单,与使用VS.NET开发同一软件相比较,其开发周期可以缩短至三分之一,只是随着Sybase的没落,技术更新不及时,使得PB开发工具逐渐被遗忘在时间的长河中,很少被人提及和记起.但数据窗

00 Cadence学习总目录

这个系列是我学习于博士CADENCE视频教程60讲时,一边学一边记的笔记.使用的CADENCE16.6. 01-03课 了解软件 创建工程 创建元件库 分裂元件的制作方法 04课 正确使用heterogeneous类型的元件 05讲 加入元件库,放置元件 06讲 同一个页面内建立电气互连 07讲 总线的使用方法 08讲 browse命令的使用技巧 10讲 元件的替换与更新 11讲 对原理图中对象的基本操作 13讲 如何添加footprint属性 14讲 生成网表 15讲 后处理 16讲 高速电路

Ext.Net 布局

Ext.Net 布局 Panel布局类有10种:容器布局,自适应布局,折叠布局,卡片式布局,锚点布局,绝对位置布局,表单布局,列布局,表格布局,边框布局       1,Ext.layout.ContainerLayout 容器布局 提供容器作为布局的基础逻辑,通常会被扩展而不通过new 关键字直接创建,一般作为默认布局存在 2,Ext.layout.FitLayout 自适应布局 使用layout:'fit' 将使面板子元素自动充满容器,如果有多个子面板也只会第一个会被显示 3,Ext.lay

NSIS

NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System) 的缩写,它是一个免费的 Win32 安装.卸载系统,采用了简洁高效的脚本方式.它本来是一个由 Nullsoft 创建并用于作为 Winamp 及其插件发布的系统,但现已被上百个应用程序所应用,作为它们进行程序发布的工具. NSIS 创建的安装程序可以进行安装.卸载.设置系统设置.解压文件等等.几乎可以做所有事情.因为它基于脚本文件,所以您可以完全控制您的安装程序的每个

Navi.Component.DataWindow开发手册(含示例)

1概述 1.1功能简介 Sybase公司的PowerBuilder开发工具,在以前VS工具没有成事以前,是相当风光的.微软都要与其合作,学习它Db方面的技术,才成就了SQLServer数据库.PB开发工具的风光得益于它非常强大的数据窗口功能,这个技术的使用,使得开发管理类软件,尤其是开发数据库管理类软件变得异常简单,与使用VS.NET开发同一软件相比较,其开发周期可以缩短至三分之一,只是随着Sybase的没落,技术更新不及时,使得PB开发工具逐渐被遗忘在时间的长河中,很少被人提及和记起.但数据窗

ABAP实战屏幕SCREEN设计(二)

屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据.主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕. 上一篇博文"ABAP实战屏幕SCREEN设计(一)"主要介绍了以下内容: (1)第一个"HELLO WORLD" Screen程序 (2)工具条和菜单设计 (3)屏幕对象 (4)数据字典关联字段 (5)逻辑流 (6)下拉框设计 本篇博文将继续介绍剩下内容,主要包含 (1)修改屏幕状态 (2)子窗口(Subscreen) (3)表条目控制 (4

Android驱动开发5-8章读书笔记

Android驱动开发读书笔记                                                              第五章 S5PV210是一款32位处理器,具有低功耗的的特点,可为移动设备和一般应用提高性能的微处理器解决方案.它集成了ARM CORTEX-A8核心.实现了ARM架构V7且支持外围设备.他的关键功能是“以带有NEON的cpu子系统为基础的arm”,32/32kb i/d缓存,512kb l2缓存,操作频率800hz为1.1v,1ghz为1.2