作为一个ERP数据处理框架,大部分的开发场景都差不多. 理想中,对于通用数据处理,我的步骤如下: 1.为窗体指定数据来源(数据表/查询等): 2.拖入编辑控件,指定绑定字段: 3.结束. 为此,我设计了几个基类窗体,给它们分成几个场景(如无数据/单表数据/主从表/多表关联等),在不同的业务模型下,我选取相应的基类窗体进行继承. 首先,看看最基础的基类窗体,它包含了基础的处理(诸如多语言加载.权限判断.状态刷新.自动数据绑定等基础方法和属性): /// <summary> /// 窗体基类 //…
最基础的窗体基类其实是通过应用场景反推的结构. 以下是场景一: 单表应用,普通的数据,比如单位/颜色/特殊字典等使用者少的,无需过多控制的可以使用一个数据表格来管理. 和Excel表格差不多,批量修改,统一保存. 这种设计时只需要变更Datagridview的数据列,并在代码中指定数据来源即可.看下代码: #region 数据目标定义 SaveTableName = "SYS_URightDef"; SaveTablePrimaryKey = "URDefRKEYIN&quo…
对于软件来说,启用自动更新是非常必要的. 根据软件的应用场景,我们可以设计不同的更新模型. 目前,IMES框架运行在.Net framework 4.0下面,使用的Win系统版本在Win7,域内管控,平时业务调整也不是很频繁. 所以,我的更新很粗放,就是删除旧文件,拷贝新文件: 1.更新文件放置在文件服务器一个公共目录下:\\SV001\Public\Update : 2.仅在用户登录时检测更新(或者在系统界面点击“更新”按钮手动更新): 3.根据业务变更可以指定更新某一个文件.一个文件夹.或者…
作为ERP等数据应用程序,数据库的处理是重中之重. 在框架中,我封装了一个数据库的基类,在每个模组启动或窗体启动过程中,实例化一个基类即可调用CRUD操作(create 添加read读取 update 修改delete删除),当然,还包括基础的SQL事务处理. 这个过程中,还考虑到对插件的管控,利用反射增加了调用授权,避免未经授权的程序盗用数据连接. 看看完整的代码: /// <summary> /// 数据库连接基类 /// </summary> public class DBC…
初学时,有了想法却完全不知道该从何下指,此序列将抛砖引玉,与大家共同学习进步. 一个程序的初始,必然是启动. 我的要求: 1.应用程序保持单例: 2.从配置文件加载一些基础数据进行初始化: 3.显示软件的LOGO页面: 4.判断应用程序是否有更新: 4.进入用户登录界面: 5.用户成功登录后显示主界面. 如上图,基本达成目标,这个项目也是很简单的结构: 看窗体名称就知道各自的用途了.主要的Program.cs代码如下: static class Program { public static b…
一直对商业控件不感冒, 结合日常工作, 我写了几个常用控件. 一.下拉框控件(仿Access下拉框:F4下拉,自动输入,支持单/多列显示),可在Datagridview中使用. 1.常规: 2.Datagridview: 二.带按钮的文本框(可在Datagridview中使用): 1.常规: 2.Datagridview 三.个性文本框(限制数字.文本等等,可以设置必输项和小提示): 四.Framework Ribbon功能区,就是一个切换页面了,仿Office的Ribbon(可折叠). 目前的…
Programmer普弱哥们都喜欢玩自己的框架,我也不例外. 理想中,这个框架要易于理解.易于扩展.易于维护:最重要的,易于CODING. 系统是1主体框架+N模组的多个EXE/DLL组成的,在主体框架打开的时候,编译完模块EXE可以马上响应需求,不用退系统,不用重登录. 大概的目标:来一个新功能需求,在框架中拷贝一个模板,修改一下定义,再挂接一下,就可以上线. 一.先看看VS的解决方案: * A10做为整体基石,维护通用的代码类库(如加解密/INI处理/XML/JSON/WEB调用等): *…
个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基类窗体,窗体加载时根据全局语种变量到内存表中加载多语言元素并赋值给有Text等文本属性的对象. 4.关于数据库字段的多语言显示,我目前是使用一个LL(本地)和一个LI(国际)字段共2个字段来记录2种语言数据,并在相关查询语句中根据全局语种变量加载. 这样,不管是软件页面元素,还是存储的数据,都能支持…
如果没有特别需求,和场景1一样只变更表名,主键字段,检测字段等名称,不需要写其它代码了. * 清单列表+单笔编辑/保存,适用于大多数基础资料管理以及简单的单据资料录入(当然,排版是要改一改的): * 目录树(也为列表+单笔记录变更模式):…
满足用户体验,在数据录入时,能在输入完一个信息后通过回车或Tab键自动的切换到下一个控件(字段). 在界面控件设计时,默认可以通过设置控件的TabIndex来实现.但在布局调整时或者是对输入的内容有选择性时,从用代码的方式来处理显得更好维护一点. 完整的实现方法如下: /// <summary> /// 回车.Tab键盘切换或执行操作 /// </summary> public sealed class TabEnter:IDisposable { private List<…
private void frmLogin_KeyPress(object sender, KeyPressEventArgs e) { //按回车键查找下一个可设置焦点的组件. if (e.KeyChar == (Char)Keys.Enter) { this.SelectNextControl(this.ActiveControl, true, true, true, true); e.Handled = true; } } 第二种方法:可特殊控制 Control current = thi…
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfrom下CefSharp的基本使用,包括显示网页url/本地html显示.JavaScript调用异步C#方法.JavaScript调用带参数C#方法.JavaScript调用委托C#方法.JavaScript调用C#返回实体对象.ChromiumWebBrowser控件扩展IContextMenuHa…
上一篇<分享在winform下实现模块化插件编程>已经实现了模块化编程,但我认为不够完美,存在以下几个问题: 1.IAppContext中的CreatePlugInForm方法只能依据完整的窗体类型名称formTypeName来动态创建窗体对象,调用不够方便,且该方法创建的窗体不受各模块注册窗体类型AppFormTypes限制,也就是可以创建任何FORM,存在不确定性: 2.动态创建的窗体对象无法直接对其公共属性或公共方法进行调用 3.主应用程序中的LoadComponents方法是通过指定文…
其实很早之前我就已经了解了在winform下实现插件编程,原理很简单,主要实现思路就是:先定一个插件接口作为插件样式及功能的约定,然后具体的插件就去实现这个插件接口,最后宿主(应用程序本身)就利用反射动态获取实现了插件接口的类型作为合法的插件,从而完成动态加载及宿主与插件之间的互动.因为之前一段时间一直搞B/S架构开发没有时间去实践,而恰好现在公司领导要求我对我公司原有的ERP系统架构进行重整,我们的ERP系统采用的基于分布式的三层架构,核心业务逻辑放在服务端,展示层与业务层之间采用基于WEB服…
之前的这篇文章<分享在winform下实现左右布局多窗口界面>已经实现了左右布局多窗口界面,今天本来是研究基于winform的插件编程,没想到顺便又找到了另一种实现方案,这种实现方案更简单,要写的代码也很少,具体实现如下. 可视化设计部份: 1.父窗口:ParentForm的IsMdiContainer 设置为 true,即:this.IsMdiContainer=true; 2.在父窗口中添加一个顶部菜单:menuStrip1,并新增一个菜单项:Windows,且将menuStrip1的Md…
在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,我这里就分享一个:在winform下实现左右布局多窗口界面. 我这里说的多窗口是指一个父窗口包含多个子窗口,在winform中实现这种效果很简单,即将某个窗口的IsMdiContainer设为true,然后将其它子窗口的MdiParent设为其父窗口对象即可,这样就完成了一个多窗口界面,效果如下: 点击NEW新打开一个窗口,其效果如下: 请看我上图红色…
Windows Forms是由Win32 API封装的开发组件,最初是为了替代mfc,但却没有体现与Model View Controller架构对应的特色,进而在.net framework 3.0中推出了wpf,富控件数据显示方面,利用模板功能轻松实现. 在winform下要想自定义一些用户控件,就需要运用的2D绘画类.下图我们为ListBox重新排列了数据显示方式,并为每一个item加入了删除按钮. 首先我们设计一个承载数据的类ListBoxItem. public class ListB…
在录入界面中,用户往往需要按回车键时光标自动跳入下一个文本框,以方便录入操作.在C#中实现该功能有多种方法,以下是小编收集的不使用TAB键,而直接用回车键将光标转到下一个文本框的实现方法. 一.利用Windows消息模拟发送Tab键 将各个TextBox的TabIndex属性按顺序编号1.2.3……,然后将TextBox的TabStop属性置为True,在每一个TextBox的键盘按下事件中,执行以下代码即可(各个TextBox可共用同一个键盘按下事件). /// <summary> ///…
本文实例讲述了Winform下实现图片切换特效的方法,是应用程序开发中非常实用的一个功能.分享给大家供大家参考之用.具体方法如下: 本实例源自网络,功能较为齐全.丰富!主要功能代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Drawin…
在winform下基于mapxtreme2008 v7.0 生成了一个地图软件,用debug方式运行无误,但改为release版时提示缺少一大堆dll,如: 无法从C:\Program Files (x86)\Common Files\MapInfo\MapXtreme\7.0.0下复制AllType.DLL 等 经搜素,在C:/Windows/assembly/GAC_32/MapInfo.CoreEngine.Wrapper/7.0.0.220__93e298a0f6b95eb1/下包含所有…
转自:http://blog.csdn.net/shihuan10430049/article/details/3734398 这段时间因项目需要,要实现WinForm下的文件上传,个人觉得采用FTP方法太麻烦,还得配置FTP服务器,要通过防火墙也是一个麻烦.本来打算采用WebClient方法,但是采用这个方法实现后,进度条很短时间后就达到最大值,要等待一段时间才能传送完毕,要是文件太大(我这里测试约100M),会出现错误.后来才知道,原来WebClient是在加载完整个文件到内存后才真正开始上…
审核流设计和使用参考以下资料: 审核流设计 http://www.cnblogs.com/spring_wang/p/4874531.html 审核流实例 http://www.cnblogs.com/spring_wang/p/4874584.html 本文主要介绍一下,审核流在审核过程当中,审核人会接到审核提示邮件,并且不需要登录系统直接在邮件里进行审核处理.通过联网和单点登录与邮件发送技术来实现. 下面以一个请购单为例 2.当单据提交之后,接受审批的人就会接到一封邮件如下:(按审核人在用户…
近期接手一个winform 项目,虽然之前有.net 的经验,但是对一些控件的用法还不是很熟悉. 这段时间将会记录一些在工作中遇到的坎坷以及对应的解决办法,写出来与大家分享并希望大神提出更好解决方法来促进进步. 我也会尽可能把我查找到资料的出处引出来,以此来感恩对我提供帮助的人们. 正题如下 一.关于Winform下DataGridView中实现checkbox全选反选.同步列表项的处理 1.checkbox的添加:在设计页面选择编辑列在新添加的列中注意如下几个属性: SortMode = No…
/// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileNamePath">要上传的本地文件(全路径)</param> /// <param name="saveName&qu…
这篇文章主要介绍了在winform下实现左右布局多窗口界面的方法之续篇 的相关资料,需要的朋友可以参考下 在上篇文章在winform下实现左右布局多窗口界面的方法(一)已经实现了左右布局多窗口界面,今天本来是研究基于winform的插件编程,没想到顺便又找到了另一种实现方案,这种实现方案更简单,要写的代码也很少,具体实现如下. 可视化设计部份: 1.父窗口:ParentForm的IsMdiContainer 设置为 true,即:this.IsMdiContainer=true; 2.在父窗口中…
在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,通过本文给大家介绍在winform下实现左右布局多窗口界面的方法,本文介绍的非常详细,对winform布局相关知识感兴趣的朋友一起学习吧 在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,我这里就分享一个:在winform下实现左右布局多窗口界面. 我这里说…
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winformlistobjectnullclass 很少写WinForm程序第一次使用ListBox控件就遇到了比较恶心的问题.因为我不想手动绑定ListBox中的Item就使用了DataSource,但是当我进行一些添加.删除操作时就报了这个错“设置DataSource属性后无法修改项集合”.实在太恶心…
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合” 最近更新: 2013-2-15    587   很少写WinForm程序第一次使用ListBox控件就遇到了比较恶心的问题.因为我不想手 动绑定ListBox中的Item就使用了DataSource,但是当我进行一些添加.删除操作时就报 了这个错“设置DataSource属性后无法修改项集合”.实在太恶心了,不知道 设计ListBox的人是怎么想的给了DataSource属性却不能随便更改,而我要实现在一个…
textbox中输入时加限制条件 分类: C# winform2008-08-26 08:30 306人阅读 评论(0) 收藏 举报 textbox正则表达式object 1.用正则表达式! 2.使用TextBox的change事件,对每次输入都进行判断. 3. 响应textchange事件,再加上正则表达式判断. 4 textBox_TextChanged事件代码中加限制条件     使用textBox1.Select(int   stat,int   long)方法,来过滤掉无用字符!!To…
为什么要做? 首先是为了练习一下c#. 想必大家都有过记不起某个平台的账号密码的经历,那种感受着实令人抓狂.那这么多账号密码根本记不住!我之前用python写过一个超级简单(连账号信息都写在代码里那种)的控制台程序用来给我提示密码,但是我想添加一个账号时直接被麻烦到吐. 所以我才想用Winform做一个简单的小工具来帮助我记忆.(仅供我自己使用(所以界面会比较丑..),但是我会把代码贴出来所以有点c#基础的其实都可以自己做一个) 设想 我的需求非常简单 在我需要的时候,输入一个平台能把对应的账号…