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界面,上面一个button,Text属性“启动向导”
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()); //启动界面
}
}
}
- 使用CocosSharp制作一个游戏 - CocosSharp中文教程
注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...
- 使用Setup Factory安装包制作工具制作安装包
在我们开发完软件后,除了极个别案例我们把整个目录复制给客户用外,我们一般都需要做成安装包,方便整个软件的部署操作,以安装包的部署操作可能简单的是复制文件,也可能包括一些注册表.数据库等额外的操作,不过 ...
- 安装包制作工具 SetupFactory使用1 详解
2014-11-19 Setup Factory 是一个强大的安装程序制作工具.提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序.可建立快捷方式,也可直接在 Windows ...
- Inno Setup制作应用程序安装包
我最近写了一个MFC应用程序,想发给其他的小伙伴玩一玩,直接发了个exe文件过去,结果发现小伙伴那边打不开.原来这个exe文件虽然是MFC静态编译的,但是还依赖了其他几个.dll文件,需要把这几个dl ...
- 您还差宝贝一张语文教学光盘!教你如何制作ISO文件
1 大家没有发现 宝宝初上小学无法专心地做作业.读书? 我家的宝贝就是这样 做作业时 总是东搞搞,西弄弄 完全无法专心 再不就是不耐心 读一遍课本就觉得累 读三两遍就说学习是个苦差事儿 2 一直以来 ...
- 安装包制作工具 SetupFactory 详解
Setup Factory 是一个强大的安装程序制作工具.提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序.可建立快捷方式,也可直接在 Windows 系统的注册表加入内容 ...
- WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)
转自:http://blog.sina.com.cn/s/blog_58c380370100cp5x.html 文件大小:39.5M(支持Win7安装,早期的通用PE工具箱,小巧不过几十兆,现在都臃肿 ...
- 00 Cadence学习总目录
这个系列是我学习于博士CADENCE视频教程60讲时,一边学一边记的笔记.使用的CADENCE16.6. 01-03课 了解软件 创建工程 创建元件库 分裂元件的制作方法 04课 正确使用hetero ...
- Android驱动开发5-8章读书笔记
Android驱动开发读书笔记 第五章 S5PV210是一款32位处理器,具有 ...
随机推荐
- 设计前沿:16款扁平风格 iOS 7 图标设计
最新发布的 iOS 7 抛弃了曾经倍受追捧的拟物化设计,采用扁平化,极简设计的界面.对于 iOS 平台来说,采用没有阴影的平面设计其实是有道理的.以前的屏幕分辨率有限,必要的阴影可以填补小尺寸,分辨率 ...
- 小试XML实体注入攻击
基础知识 XML(Extensible Markup Language)被设计用来传输和存储数据.关于它的语法,本文不准备写太多,只简单介绍一下. XML基本知识 1 2 3 4 5 <?xml ...
- table的复制 SqlServer 数据库添加临时表(select 字段1,字段2,字段3 into)
select 字段1,字段2,字段3 into tempname form table where table.id=1; oralce : insert into MID_DRUG_DETA ...
- 【报错】java.lang.ClassNotFoundException: org.apache.ibatis.session.SqlSession
报错 java.lang.ClassNotFoundException: org.apache.ibatis.session.SqlSession 或者 java.lang.ClassNotFound ...
- 计算价格, java中浮点数精度丢失的解决方案
计算价格, java中浮点数精度丢失的解决方案
- SpringBoot的Web配置
重写全局配置 如果springboot提供的springmvc配置不符合要求,则可以通过一个配置类(标有@Configuration注解的类)加上@EnableWebMvc注解来实现完全自己控制的mv ...
- ovs常用操作
1.添加网桥:ovs-vsctl add-br 交换机名 2.删除网桥:ovs-vsctl del-br 交换机名 3.添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名) 4. ...
- 20165221学习基础和C语言基础调查
1.你有什么技能比大多人(超过90%以上)更好? - 我觉得自己应该改算资质平平的那种人,如果说有什么技能比大多数人更好,我觉得应该是看过自己喜欢的书后,那种记忆能力.就比如自己从小对历史很感兴趣,小 ...
- MVC传参数给js的时候 如果是数值 变量要进行一下转换才能正确识别 例如var aaa = parseInt('@Model.ClickIndex');
这是拼接参数的格式 <div id="a1" style="font-size:12px" onclick="location = '@item ...
- CSS函数
布局时发现CSS居然能进行计算,cale()函数用于动态计算长度值 html,body的height为100%,黑框浮动width为200px,橙框处标准流,由于浮动最初目的是为了实现文字环绕,所以文 ...