本项目是一个Winform应用编程框架和UI库。通过这个该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制(赋值、条件判断、循环、跳转)和功能(字符/文件处理、Windows脚本执行、逻辑运算、数学运算、数据输入输出及输入验证、数据格式转换、加密解密、表单字段验证等);动态加载即插即用核心业务处理动态链接库(CBLP Dll)实现特定的业务处理功能;支持多线程、多语言。

程序启动运行示意图:

**备注SeqExec.exe是一个用C编写的.net程序的启动程序,用于检测.net版本并安装指定的版本,然后运行主执行程序并传递参数。(代码和示例详见:https://www.github.com/liggin2019/Ligg.SeqExec)

说明:

Application(应用):一个应用,对应一个CBLP.dll。例如,如果都是基于本框架, ERPHRCRM各是一个应用;在本人即将开源的应用项目里,企业网盘、Windows运维自动化、电脑工具箱各是一个应用。

Function(功能):一个应用的功能界面,一个应用对应多个Function(功能);如某应用可分为管理员界面、用户界面。

View(视图):一个Function(功能)对应多个View(视图),本框架用View(视图)实现多窗体(MDI)的效果。 一个View(视图)由多个Area(域)组成,Area(域)是Form上在不同位置的一个Panel。。

PublicView(公共视图)是总是显示(不会被隐藏)的View(视图),其他View(视图)如果不是当前View(视图),会被隐藏。

Zone(区):可以看成是一个表单,一个View(视图)里面有多个Zone(区),Area是Zone(区)的容器,Zone(区)里面包含多个控件和Transaction Items。每个Zone(区)是一个独立作业单元(IEU),可以单独组成一个View(视图)独立运行,或者是以模态(Dialog)的方式弹出对话框。

Process/Procedures(过程):一个过程控制的配置文件,实现赋值、条件判断、循环、跳转等,分为Function(功能)级别和Zone(区)级别;Procedure(过程)有以下类型,见下图。

启动运行步骤:

步骤1:运行启动程序SeqExec.exe>>传参>>运行.\Clients\Form\Run.exe

步骤2:读取Application级别配置文件>>设置Culture和当前/缺省语言>>验证启动密码>>其他验证>>启动登录>>显示软件封面>>创建StartForm的实例>>初始化CBLP.dll

步骤3:读取Function级别配置文件>>确定FunctionForm样式/风格>>初始化FunctionForm

步骤4:读取PublicView配置文件>>初始化PublicView

步骤5:读取PublicView包含的各个Zone配置文件>>初始化Zones

步骤6:读取首个View配置文件>>初始化View

步骤7:读取首个View包含的各个Zone的配置文件>>初始化Zones

下面将分几个章节来介绍设计思路和分析源码:

请先在Github fork我们的项目(https://github.com/liggin2019/ligg.EasyWinApp)并下载Src、DebugRelease文件夹,  开发环境:VS 2017,.NET Framework 4.6.01586

 

Ligg.EasyWinApp-101-Ligg.EasyWinFormApplication--启动,传入参数、读取Application级别配置文件、验证密码、软件封面、启动登录、StartForm

LiggEasyWinApp-102-Ligg.EasyWinFormFunction--ControlBox、Tray、Resize、Menu

LiggEasyWinApp-103-Ligg.EasyWinFormView

LiggEasyWinApp-104-Ligg.EasyWinFormProcedure

LiggEasyWinApp-105-Ligg.EasyWinFormZone

LiggEasyWinApp-106-Ligg.EasyWinFormControl StyleClassStyleText

LiggEasyWinApp-107-Ligg.EasyWinFormResolveConstant, GetTextAction

LiggEasyWinApp-108-Ligg.EasyWinForm:各控件介绍

LiggEasyWinApp-109-Ligg.EasyWinForm:控件字段验证

LiggEasyWinApp-110-Ligg.EasyWinForm:支持多语言

LiggEasyWinApp-111-Ligg.EasyWinForm:支持多线程

LiggEasyWinApp-112-Ligg.EasyWinForm:如何调试和发布

LiggEasyWinApp-113-Ligg.EasyWinForm:与Windows域帐号集成实现SSO

LiggEasyWinApp-114-Ligg. EasyWinForm即插即用“.Net组件---核心业务逻辑处理组件(CBLP)组件

LiggEasyWinApp-115Ligg.EasyWinFormCBLP组件与数据库接口(MySQL/MSSQL

LiggEasyWinApp-116-Ligg.EasyWinFormCBLP组件与服务器端接口(WCF/RESTful)

LiggEasyWinApp-117Ligg.EasyWinFormCBLP组件与嵌入式设备接口(基于OPC标准协议)

Ligg.EasyWinApp-100-Ligg.EasyWinForm:一款Winform应用编程框架和UI库介绍的更多相关文章

  1. Ligg.EasyWinApp-000: 一款Windows应用编程框架介绍

        本框架(解决方案)是一个Windows应用编程框架和UI库,通过该框架,不需任何代码,通过XML配置文件,搭建任意复杂的Windows应用界面,以类似Execel公式的方式实现基本的过程控制( ...

  2. 介绍一款倍受欢迎的.NET 开源UI库

    概述 今天要带大家了解的是一款WPF的开源控件库MahApps.Metro.MahApps.Metro是用于创建现代WPF应用程序的工具包,它许多开箱即用的好东西. 目前支持的NET Framewor ...

  3. vue下超级滚动条perfect-scrollbar(在特定框架里使用一款并非为该框架定制的库/插件)

    点我查看

  4. GitHub上排名前100的iOS开源库介绍(来自github)

    主要对当前 GitHub 排名前 100 的项目做一个简单的简介,方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 若有任何疑问可通过微博@李锦发联系我 项目名称 项目信息 ...

  5. GitHub上排名前100的Android开源库介绍

    GitHub上排名前100的Android开源库介绍 文章来源: http://www.open-open.com/news/view/1587067#6734290-qzone-1-31660-bf ...

  6. 浅述WinForm多线程编程与Control.Invoke的应用

    VS2008.C#3.0在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的方式在W ...

  7. WinForm多线程编程简单Demo

    需要搭建一个可以监控报告生成的CS(WinForm)工具,即CS不断Run,执行获取数据生成报告,经过研究和实践,选择了使用"WinForm多线程编程"的解决方案.当然参考了园中相 ...

  8. LiteHttp:一款‘智能’的HTTP框架类库

    LiteHttp:一款‘智能’的HTTP框架类库(转自github) 简介 LiteHttp是一款简单.智能.灵活的HTTP框架库,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速 ...

  9. 推荐10款优秀的JavaScript Web UI库 框架和套件

    在进行Web开发时,并非所有的库都适合你的项目,但真正开发的时候,你任然需要依赖一款UI框架.特别在你时间紧迫的时候,它是你忠实的朋友. 他们都是些广泛使用包含不同语言实现的WEB UI框架.今天我就 ...

随机推荐

  1. python原类、类的创建过程与方法

    今天为大家介绍一下python中与class 相关的知识-- 获取对象的类名 python是一门面向对象的语言,对于一切接对象的python来说,咱们有必要深入的学习与了解一些知识 首先大家都知道,要 ...

  2. elementUI最新版的el-select使用filterable无效无法匹配正确搜索结果的Bug解决办法

    Bug描述: 今天做开发时遇到一个elementUI存在的bug. 当el-select使用filterable功能搜索时,如果你恰巧使用的是微软拼音输入法,那么你有可能会遇到搜索结果和输入的值不匹配 ...

  3. 为什么QQ能帮你找到失散多年的兄弟?----图论

    编程三分钟的第 44 篇原创文章 为什么qq里"可能认识的人"功能推荐的如此精准? 为什么两个没有什么联系的朋友会相互认识? 一切的背后到底是道德的沦丧,还是人性的扭曲 ? 让我们 ...

  4. Android 网络编程(一)

    概述 一.Android平台网络相关API接口 1.java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见H ...

  5. SpringMvc commons-fileupload图片/文件上传

    简介 SpringMvc文件上传的实现,是由commons-fileupload这个jar包实现的. 需求 在修改商品页面,添加上传商品图片功能. Maven依赖包 pom.xml <!-- 文 ...

  6. Nginx的定时事件的实现(timer)

    Nginx的定时事件的实现(timer) 在前面的文章里面就说到了在事件循环中除了要处理所有的从epoll中获取的事件之外,还要处理一些timer事件,这篇文章就讲讲Nginx的timer是如何实现的 ...

  7. 笔记||Python3之对象的方法

    什么是对象的方法? python中的一切类型的数据都是对象. 对象:数据和方法 对象数据:如 a = 'sfd' 对象方法:其实就是属于该对象的函数 对象的方法调用:对象.方法 字符串对象常用的方法: ...

  8. 笔记||Python3之对象与变量

    什么是对象?什么是变量? 在python中,一切都是对象,一切都是对象的引用. 变量相当于数学中的等式,比如xy = 20 .在编程中变量还可以是任意数据类型. 对象是分配的一块内存,有足够的空间去表 ...

  9. 函数中this的指向

    每个函数在被调用时都会自动取得两个特殊变量:this和arguments:内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量. f 1 var name ...

  10. OS OSTEP (Operating Systems Three Easy pieces 操作系统导论 )

    读<OSTEP>的一点重点记录与感悟 (未完) Chapter-2 第二章 1. 操作系统的设计目标:  抽象.高性能.保护.不间断运行. 抽象:建立一些“抽象”,让操作系统方便和易于使用 ...