Infragistics 是.NET平台优秀的控件供应商,囊括了WinForms,ASP.NET,Silverlight,WPF,Windows Phone等所有关于微软.NET技术的界面控件。借助于这些功能复杂的控件,为ERP的界面提供了灵活的操作能力。

本篇不谈控件开发,只详细说明ERP系统如何使用Infragistics WinForms,而不用.NET 自带的控件。

1  文本编辑控件提示必须输入值

如果一个文本编辑控件必须输入值,有许多实现方法可以借鉴。看金蝶ERP的实现,在文本标签控件位置处用星号标识。

如果用Infragistics WinForms的TextEditor,可实现如下的效果:

对于必须输入值的文本编辑控件,控件末尾有一个星号图片标识。如果这个编辑控件有值,则图标消失。

只需要一行代码,Infragistics WinForms可实现这个效果。

txtCustomerNo.Appearance.Image = Properties.Resources.Required_Field_16;

2  控件的数据查找窗体

继续比较金蝶界面,还是用上面的那张模拟BOM的图片,工艺路线和计量单位文本编辑控件后面有一个小图标,表示点这个图标,可弹出一个数据查找窗体,这样方便用户录入数据。

ERP系统也有类似的实现,先看界面效果图,注意左边第一个控件Ccy货币输入控件,它后面有一个小按钮。

当鼠标离开时,Ccy控件后面的小按钮自动消失。为了实现这个特性,也只需要一行代码:

EditorButton button = new EditorButton("lookup");
button.Text = "...";
txtCcy.ButtonsRight.Add(button);

3  控件支持钻取

钻取这个词的含义来源于报表中,主表点击事件钻取到子表明细记录。ERP中也吸取了这个思想,可以给控件设定要钻取的功能。比如上图中的货币Ccy,销售员Salesman,点击文本编辑控件中值,可打开相应的主档功能,查看详细信息。

4  Grid控件支持过滤,排序,分组,字段选取,查找,列顺序重排列,导出Excel

以图为例子,参考销售订单明细中的网格控件。

Code Project中有几篇文章,是专门讲解通过重写微软的DataGridView控件,如何具备以上列出的特性。
Infragistics WinForms已经内置了以上特性,而且支持属性序列化。比如上图中列的顺序是Line No,Item No

我可以将Item No拖动到Line No列的前面,在窗体关闭时,保存这个顺序,下次打开窗体时读取字段顺序值,恢复成用户设定的顺序。能够保存用户偏号(Profile)是系统友好的一个主要方面。

5 日期时间控件DateTimePicker 支持空值

.NET WinForms自带的日期时间控件不支持空日期时间值,这里的空值不是指类型DataTime?。当打开用户界面创建新的单据时,如果日期控件没有任何设定值动件,日期控件将返回空时间值,也就是保持NULL值。

6 按钮Button控件支持图片

参考下面的报表打印按钮,它可以显示一个打印的小图标。Delphi很多年前就具备这个特性。

7 控件支持属性序列化

窗体中对控件的布局Layout的修改,可以保存到数据库或存储介质中,当再次加载控件时,可以恢复成上次用户修改的布局样式(Layout)。这个特性,在Grid,TreeView控件有很重要的作用。

在窗体关闭前,读取控件的属性,保存到数据库中,读取属性值:

values.Add(new ComponentPropertyValue("AllowRowSummaries", true));

界面加载时,根据数据库中的记录设置控件属性:

if (values.ContainsKey("AllowRowSummaries") && Convert.ToBoolean(values["AllowRowSummaries"].Value))
{
current.AllowRowSummaries = AllowRowSummaries.True;
}

把上面两段代码,分别放到窗体加载和关闭事件中,可参考下面的程序代码,实际保存用户偏号。

protected override void OnLoad(EventArgs e)
{
LoadFormProfile();
} protected override void OnClosed(EventArgs e)
{
SaveFormProfile();
}

8  控件增加上下文菜单

文本编辑类控件,内置标准的剪切复制粘贴功能,还应该增加这三个编辑功能的上下文菜单。

日期时间控件,也支持剪切复制粘贴功能。

9 控件的Tab Index顺序要预先设置好,Enter键可以当Tab键使用

ERP界面大部分控件是单行文本输入,可以考虑给编辑控件重写键盘事件,按Enter键可切换到下一个Tab Index控件。

protected override void OnKeyDown(KeyEventArgs e)
{
if (!base.DesignMode)
{
if ((!e.Alt && !e.Control) && !e.Shift)
{
if (e.KeyCode == Keys.Enter)
{
SendKeys.Send("{TAB}");
e.Handled = true;
}
 

这个特性在Grid控件中非常有用,回车后直接跳到下一个单元格(Cell),最后一个单元格后再按回车键,可跳到下一行。

10  可折叠式组合框 Expandable Groupbox

上面的截图中用Groupbox将特性相近的控件包括起来,这是界面设计中很友好的一种表达方式。如果窗体的空间位置不够,或是控件的值仅仅用于参考,可以考虑用UltraExpandableGroupBox,它的模样参考下面的界面例子。

UltraExpandableGroupBox左上角有一个可折叠或展表的符号,可节省屏幕空间。

11 Grid控件支持打印预览和打印

Grid控件内置了打印功能,参考下图,在数据查询类功能中有很重要的作用。

Infragistics控件的设计人员设计这个打印功能,考虑了环保方面的要求(节省纸张和墨水)。

解析大型.NET ERP系统 灵活复杂的界面控件Infragistics WinForms的更多相关文章

  1. 解析大型.NET ERP系统 十三种界面设计模式

    成熟的ERP系统的界面应该都是从模板中拷贝出来的,各类功能的界面有规律可遵循.软件界面设计模式化或是艺术性的创作,我认可前者,模式化的界面客户容易举一反三,降低学习门槛.除了一些小部分的功能界面设计特 ...

  2. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  3. 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计

    ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...

  4. 解析大型.NET ERP系统 界面与逻辑分离

    Windows Forms程序实现界面与逻辑分离的关键是数据绑定技术(Data Binding),这与微软推出的ASP.NET MVC的原理相同,分离业务代码与界面层,提高系统的可维护性. 数据绑定 ...

  5. 解析大型.NET ERP系统 高质量.NET代码设计模式

    1 缓存 Cache 系统中大量的用到缓存设计模式,对系统登入之后不变的数据进行缓存,不从数据库中直接读取.耗费一些内存,相比从SQL Server中再次读取数据要划算得多.缓存的基本设计模式参考下面 ...

  6. 解析大型.NET ERP系统 多国语言实现

    实现多国语言有许多种实现方案,无外乎是一种字符串替换技术,将界面控件的文本标签替换成相应语言的文字..NET Windows Forms实现多国语言的方法有以下几种: 1 .NET的方案,使用资源文件 ...

  7. 解析大型.NET ERP系统 设计异常处理模块

    异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...

  8. 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式

    我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...

  9. 解析大型.NET ERP系统 权限模块设计与实现

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

随机推荐

  1. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  2. JavaScript进阶之路(一)初学者的开始

    一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

  3. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  4. 【.net 深呼吸】启动一个进程并实时获取状态信息

    地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...

  5. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  6. 卡片抽奖插件 CardShow

    这个小项目(卡片秀)是一个卡片抽奖特效插件,用开源项目这样的词语让我多少有些羞愧,毕竟作为一个涉世未深的小伙子,用项目的标准衡量还有很大差距.不过该案例采用 jQuery 插件方式编写,提供配置参数并 ...

  7. PHP之GD函数的使用

    本文讲解常用GD函数的应用 1.一个简单的图像 我们先看一个例子: <?php $w = 200; $h = 200; $img = imagecreatetruecolor($w,$h); $ ...

  8. [原]Cachedb 网络模块文档

    Cachedb 网络模块文档 整体结构 多路复用 (epoll 模块) 事件驱动 (事件封装) 缓冲管理 (上层buffer管理) 设计思想 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚 ...

  9. 【SAP业务模式】之ICS(三):前台操作

    本片博文开始讲解SAP前台是如何实现ICS业务模式的. 一.VA01开立销售订单 我这里为了方便,创建了一个订单类型ZMIV作为公司间销售的订单类型,其实公司间销售订单跟标准的销售订单是一致的.同时, ...

  10. win10电脑优化

    Windows10必做的优化 --道心 关闭服务 右键点击"此电脑",选择"管理",进入"计算机管理"窗口. 在左侧的菜单选择"服 ...