实战小技巧系列(4):WinForm简单步骤制作
进行类似于上一步,下一步的操作,是比较常见的,在WebAppliction中自从2.0发布以后到是已经有类似控件可以操作了,不知道为什么在Winform中好象没有该控件(我没有确认过,不知道是否真的没有?)。所以没有办法,只好自己做了。
问题:
由于最近要做一个软件的升级程序,程序本身比较简单,无非是执行一些SQL语句,覆盖一些文件而已,但我想模仿安装程序一样,可以进行步骤操作,基本要求如下:
1、具有上一步,下一步操作;
2、进行上一步和下一步操作时,能够保持原有状态,如我已经在这一步骤中录入了一些数据,点击下一步后,发现需要退回来修改,这时点击上一步返回前一步骤,那原来录入的数据必须还在;
其实需求很简单,这里主要是讲一下我的思路,从而希望大家能够提出自己的想法,进一步完善。
解决方法:
其实,对于winform来讲,没有多少经验,本人主要是从事webapplicatioin开发,这次为了做这个升级程序,也查询了一些资料,网上查到有一个,利用命令模式来操作步骤(忘记是看自哪里了)。本文里提到的解决方法根据这个演变而来,所有的步骤都是用用户控件来实现。好了不多说了,直接看代码吧:
1、创建步骤基类
namespace EcsPatch.PatchWizard
{
public class BaseWizard : UserControl
{
}
}
其实如果简单的话这个基类根本就不用创建,因为所有的用户控件,本身就继承自UserControl基类的。这里还要另写一个,主要是因为可能会有一些共用方法,为了便于重用,所以另外创建一个。
2、所有的用户控件都继承1中创建的基类
namespace EcsPatch.PatchWizard
{
public partial class TipModel : BaseWizard
{
public TipModel()
{
InitializeComponent();
}
}
}
其它步骤的用户控件也类似,不一一贴代码了。
3、创建辅助类
namespace EcsPatch.Component
{
public class WizardUtil
{
private static Dictionary<WizardItem, BaseWizard> wizardList;
/// <summary>
/// 初始化步骤列表
/// </summary>
public WizardUtil()
{
wizardList = new Dictionary<WizardItem, BaseWizard>();
wizardList[WizardItem.Tip] = new TipModel();
wizardList[WizardItem.SelectPath] = new SelectPathModel();
wizardList[WizardItem.VersionTip] = new VersionTipModel();
wizardList[WizardItem.StartPatch] = new StartPatchModel();
wizardList[WizardItem.Complete] = new CompleteModel();
}
/// <summary>
/// 更新步骤信息
/// </summary>
/// <param name="key"></param>
/// <param name="wizard"></param>
public void SetWizard(WizardItem key, BaseWizard wizard)
{
wizardList[key] = wizard;
}
/// <summary>
/// 获取步骤信息
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public BaseWizard GetWizard(WizardItem key)
{
BaseWizard wizard = wizardList[key];
return wizard;
}
/// <summary>
/// 根据状态获取步骤信息
/// </summary>
/// <param name="key"></param>
/// <param name="state"></param>
/// <returns></returns>
public BaseWizard GetWizard(ref WizardItem key, WizardState state)
{
int position = (int)key;
if (state == WizardState.Next)
{
position++;
}
else
{
position--;
}
WizardItem current = (WizardItem)position;
key = current;
return GetWizard(current);
}
}
public enum WizardItem
{
Tip = 1,
SelectPath,
VersionTip,
StartPatch,
Complete
}
public enum WizardState
{
Next = 1,
Previous,
}
}
主要是把所有的用户控件先初始化放在列表中,再加上一些方法来获取和更新这些用户控件的实例。主要实现思路如下:
A、利用枚举类型,来获取当前步骤的上一步骤用户控件实例和下一步骤用户控件实例;
B、当执行上一步或下一步操作时,通过public void SetWizard(WizardItem key, BaseWizard wizard)方法,保存当前步骤实例,其实也就保存了当前步骤的状态信息,当再执行上一步,下一步时,从中取现来的用户控件实例,也将保存有这些信息。
4、主界面CS
private WizardUtil wizardUtil;
private WizardItem currentWizardKey;
private BaseWizard currentWizard;
这三个变量,第一个是辅助类的实例,currentWizardKey保存当前步骤枚举,currentWizard保存当前步骤的用户控件实例。
初始化获取第一个步骤:
wizardUtil = new WizardUtil();
currentWizardKey = WizardItem.Tip;
currentWizard = wizardUtil.GetWizard(currentWizardKey);
InitWizard();
InitWizard方法:
private void InitWizard()
{
MiddleSplit.Panel2.Controls.Clear();
MiddleSplit.Panel2.Controls.Add(currentWizard);
if (currentWizardKey == WizardItem.Tip)
{
btnPrev.Enabled = false;
}
else if (currentWizardKey == WizardItem.Complete)
{
btnPrev.Enabled = false;
btnNext.Enabled = false;
}
else
{
btnPrev.Enabled = true;
btnNext.Enabled = true;
}
}
点击上一步骤操作:
//保存当前步骤信息
wizardUtil.SetWizard(currentWizardKey, currentWizard);
//获取下一步骤信息
currentWizard = wizardUtil.GetWizard(ref currentWizardKey, WizardState.Next);
InitWizard();
点击下一步骤操作:
//保存当前步骤信息
wizardUtil.SetWizard(currentWizardKey, currentWizard);
//获取前一步骤信息
currentWizard = wizardUtil.GetWizard(ref currentWizardKey, WizardState.Previous);
InitWizard();
代码很简单,但也确实能够实现这些基本功能,只是粗略的做了一下基本的结构,也不确定这种做法能不能满足复杂操作,一切还得靠大家自己看待了。
源码下载:/Files/licongjie/EcsPatch.rar
转载于:https://www.cnblogs.com/licongjie/archive/2008/05/07/1186291.html
实战小技巧系列(4):WinForm简单步骤制作相关推荐
- excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合
写在前面的话 知识产权算是一个盛产数据的行业.专利啊商标啊著作啊,都有著录项目.我们常说的专利分析.产业导航.企业导航.产业预警.竞争情报.技术综述.知识产权评议等等,常规操作之一就要先处理著录项目 ...
- 电影配音怎么做?短视频解说配音小技巧,其实很简单
电影配音怎么做?短视频解说配音小技巧,其实很简单 很多小伙伴在玩短视频的时候,经常可以看到电影解说短视频,它们往往可以将一部影视剧在短时间内就说出大概内容,让我们可以很快的辨别好剧烂剧.而且电影解说短 ...
- 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码
本系列之前的文章: 与其整天担心 AI 会取代程序员,不如先让 AI 帮助自己变得更强大 每日一个 ChatGPT 使用小技巧系列之1 - 给出提纲或者素材,让 ChatGPT 帮你写作 正好昨天有朋 ...
- 用html制作简单日历,CCS小技巧,如何使用CSS Grid制作简单的日历,简单有趣
原标题:CCS小技巧,如何使用CSS Grid制作简单的日历,简单有趣 日历是人类文明的重要工具之一.然后可以记住许多重要事件,并从事件的确切日期追溯到真相. 在本文中,我们将学习如何利用CSS Gr ...
- EXCEL常用小技巧系列01----排名
EXCEL常用小技巧系列01----排名 在工作中,时常需要对数据进行各种方式的排名,以下总结几种常用的排名方式: 一:有相同数字时,显示同一排名且下一排名不连续 公式:=SUMPRODUCT((数据 ...
- 超实用的Excel自动排序小技巧,原来这么简单,早点知道就好了!
日常制作表格中,我们总是要给Excel数据进行排列,这样更利于我们预览.大家知道有哪几种比较实用的排序方法吗?如果不知道的话,请跟我一起动动手吧! 第一种:最为实用普遍的方法:升序降序排列 步骤:单击 ...
- MFC小技巧系列——1、初始焦点设置
我们在使用mfc编写windows界面应用程序时,启动mfc程序后,mfc会自动分配初始的控件焦点,有时候这些焦点被分配置到编辑框.列表框时,就会造成误操作,那么该如何避免这种情况呢,这就需要我们在程 ...
- word删除分节符后之前的格式乱了_很实用的14个word小技巧,能够让你在制作标书,和排版时如有神助...
大家好!今天中标精灵给大家分享的是,一个小白怎么把"Word"从入门级别升到精通级别,也许在你急需时能用上,建议收藏慢慢学哦.Word应该是办公软件中使用频率最高的工具,但却一直不 ...
- (Java每日一谈:第五日——破除抑郁症的小窗户)实战小技巧:邮件发送
今天小编会给大家讲解几个比较实用的编程常用技巧,邮件发送就是其中的一个,邮件发送的使用场景在日常的生活中也是非常常用,对于这一块的知识点不是很难以理解,大家可以学习完了之后,得到需要的时候,再找一找相 ...
最新文章
- 讨论丨深度学习已经成为过去?迁移学习才是真正的未来?
- RUP大讲堂(第一讲):RUP简介及软件过程改进
- linux自学笔记--nginx基本配置
- t-sql里Linked server跨数据库查询
- node、npm、vue安装 -- VUE 项目 demo 实例
- 如何添加评论_如何运用运镜+转场让视频更酷炫
- 几个学习git的地方
- 学习Maven之Maven Surefire Plugin(JUnit篇)(转)
- (String)、toString()、String.valueOf区别
- Matlab~30个算法
- 黑客编程入门 之 网络编程入门
- web网页设计实例作业 ——丝绸之路 (6页) 简单个人网页设计作业 静态HTML文化主题网页
- GNS3各种IOS下载
- 运维人员必须熟悉的运维工具汇总
- 雾霾太大看不清?这里有份数据支持你一键去雾
- 【python】画四叶草
- 谷歌文档为什么没法登录_如何将Google文档文档转换为Microsoft Office格式
- BERT代码的解读1---数据处理部分
- Hutool进行DES加解密
- java学生管理系统(百度人脸识别 + Swing + mysql + 邮件发送 )
热门文章
- 8年运维大神总结:坚持4-3-2备份策略,删库也不怕
- 推荐几款好用到爆炸的SSH客户端工具
- 技术盘点:2022年云原生架构趋势解读
- 课时 17-深入理解 etcd:etcd 性能优化实践(陈星宇)
- 阿里云引领云原生进化 | 云原生生态周报 Vol. 60
- log4jdbc oracle,通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql
- bp神经网络pid控制_文章推荐 | BP神经网络PID控制器在无人机编队飞行中的应用...
- linux :YOLO5配置(ubuntu 20.04 下安装运行yolov5)
- 深度学习:yolo v3训练结果测试
- 图像降噪算法——DnCNN / FFDNet / CBDNet / RIDNet / PMRID / SID