Github 地址:https://github.com/iccb1013/Sheng.Winform.Controls

本控件库中的代码大约写于10年前(2007年左右),难免有不成熟与欠考虑之处,还请包涵。

升讯威 .Net WinForm 控件库提供了超过15种 Winform 控件,你可以直接使用本控件库,更可以通过本控件库学到 Winform 控件开发的方法和理念。

你可以学习到:

> 如何基于 Control 类重头开始实现一个具备复杂功能的 Winform 控件;

> GDI+ 绘图接口的使用方法,以及如果与用户的行为进行交互;

> 不同设计模式在 Winform 控件开发中的应用;

对于设计模式,很多人的观念是它是用来解决大型解决方案中的问题的,但是我们在这里可以看到,设计模式不仅仅用于分解大型工程,小到一个 Winform 控件的开发,都需要具备良好的模式去帮助你分解问题,解决问题。

例如说原型模式,我虽然能够对这种模式娓娓道来,但是一直想不出它的应用场景到底是什么,直到我发现微软在实现 DataGridView 时,应用了原型模式解决了若干问题,才豁然开朗。

而其它诸如工厂模式,创建者模式,命令模式等,在复杂 Winform 控件的开发中,都有非常契合的应用场景。

举例来说,我们实现一个缩略图浏览器控件,会将控件的 逻辑行为、布局管理、绘图、主题外观  拆分成几大块进行实现:

如何在控件创建,呈现的过程中,统一协调各个模块的工作?你可以在本控件库的源代码中找到答案。

源代码中包括了详细的注释,相信对你阅读使用源代码会有一定的帮助:

注意:本控件库个别位置少量使用了第三方开源代码,具体可见代码中的注释。

DEMO程序画面:

起启页控件

此启始页控件,是由 WebBrowser 定制的,允许你实现一个类似 VisualStudio 一样的启始页。
也可以使用此控件,实现 Html 页面与客户端混合的应用程序。
此页面中的数据可以由 C# 程序输出,此页面中的 JavaScript 函数可以由 C# 调用,反之亦然,页面中的 JavaScript 代码可以调用 C# 代码中的函数。

ShengDataGridView

ShengDataGridView 重绘了整个 DataGridView 的外观。包括 Checkbox 列和 Image 列,使其更加美观。

ShengDataGridView 的绘图逻辑实现在渲染器 ShengDataGridViewRender 中,你可以修改或重新实现新的渲染器以定制控件的外观。

也可以直接借助 ShengDataGridViewRendererTheme 在既有外观的基础上定制主题配色等。

ShengListView

ShengListView 是完全重头实现的一个 ListView 控件,而非原生 ListView 的继承和扩展。

将布局相关的逻辑,独立实现为不同的 Layout,ShengListViewLayoutManager 作为基类,提供了布局所需的基本功能。

将绘图相关的逻辑,独立实现为不同的 Render,ShengListViewRenderer 作为基类,提供了绘图所需的基本功能。

而绘图时所需要用的配色方案,在 ShengListViewTheme 中定义,你可以定制不同的主题。

ShengComboSelector

ShengComboSelector 是一个下拉选择框控件,这是一个重头实现的控件,并非基原生下拉框控件的继承和扩展。

你可以修改源代码,绘制想要的任何外观。

在绘制过程中所需的配色方案,都已独立定义,你也可以直接修改配色方案来定制外观。

一般情况下,推荐使用 ShengComboSelector2,因为 ShengComboSelector2 是直接基于 Control 实现的,具有更好的性能表现,你也可以修改 ShengComboSelector 的源代码使其直接从 Control 实现而不是 UserControl。

ShengComboSelector2

ShengComboSelector2 是一个下拉选择框控件,这是一个重头实现的控件,并非基原生下拉框控件的继承和扩展。

你可以修改源代码,绘制想要的任何外观。

ShengComboSelector2 比 ShengComboSelector 具有更好的性能,因为它是基于 Control 实现的,而 ShengComboSelector 是基于 UserControl 实现的。

在绘制过程中所需的配色方案,定义在 ShengComboSelectorTheme 中,你可以直接修改配色方案来或定制自己的主题配色方案。

ShengAdressBar

ShengAdressBar 是一个模仿 Windows 资源管理器地址栏的控件。

除了默认实现的 ShengFileSystemNode ,用来提供和资源管理器地址栏一样的功能之外,你也可以继承 IShengAddressNode 接口,实现自己的基于任何数据的路径选择器。并不局限于磁盘路径的选择。

ShengImageListView

ShengImageListView 是一个图像浏览器控件。

ShengImageListView 具有非常良好的实现结构,独立实现了布局管理器,渲染器,和配色方案。

ShengImageListViewRenderer,ShengImageListViewStandardRenderer:渲染器基类和默认实现的渲染器。

ShengImageListViewLayoutManager 默认实现的布局管理器。

ShengImageListViewTheme 主题功能,提供渲染器所需使用的配色方案。

你可以通过修改或实现新的布局管理器,渲染器,实现更加复杂的功能,甚至是完全不同用处的控件,例如:一个售票系统的选座控件。

ShengTreeView

ShengTreeView 是对原生 TreeView 的扩展,使其能够支持 支持Win7/Vista外观 风格的外观,以及节点的拖放操作。

ShengThumbnailImageListView

ShengThumbnailImageListView 是一个简单的缩略图浏览控件。

ShengThumbnailImageListView 是基于 ListView 实现的,并使用了独立的后台线程加载图片。

如果需要更高级的功能,或更加深入的定制,你可以使用 ShengImageListView

大杂烩

此外代码中还包括一个 Winform 下的控件输入验证,现在回过头去看,实现的并不好,就不作展示了。

欢迎交流探讨:QQ:279060597  @南京

Github 开源:升讯威 Winform 开源控件库( Sheng.Winform.Controls)的更多相关文章

  1. Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)

    利用午休时间继续把过去写的一些代码翻出来说一说,文章可能写的比较简略,但是我会努力把核心意思表达清楚,具体代码可直接访问 Github 获取. Github 地址:https://github.com ...

  2. Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目

    前言:因为这段时间要接触到DevExpress控件库,而我本身甚至对winform的控件都了解甚少,所以处在学习中,写下博客主要是为了方便后期的回顾,当然也可以给一些新人第一次接触时做为学习的参考,以 ...

  3. Winform DevExpress控件库(三) 使用NavBarControl控件定制导航栏

    NavBarControl控件:主要作用是制作包含多个选项组并且每个组里包含多个子选项的导航栏: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下 ...

  4. Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面

    SplashScreenManager控件:主要作用是显示在进行耗时操作时的等待界面: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下: 在工具 ...

  5. 《Dotnet9》系列-开源C# Winform控件库1《HZHControls》强力推荐

    大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.我最近在写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用dot ...

  6. winform基础控件总结

    转自:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 基础 - 常用控件 C# WinForm开发系列 - CheckBox/B ...

  7. GitHub开源:升讯威微信营销系统(第三方微信平台)完整源代码

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction 升讯威微信营销系统开发实践系列升讯威微信营销系统开发实践:(1)功能设计与架构设 ...

  8. GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3

    GitHub: https://github.com/iccb1013/sheng.ADO.NET.Plus 早前分享过,当时没有把代码上传到Github,只是通过邮件的形式分享给了部分需要的朋友,最 ...

  9. Github 开源:使用升讯威 Mapper( Sheng.Mapper)与 AutoMapper 互补,大幅提高开发效率!

    Github 地址:https://github.com/iccb1013/Sheng.Mapper 在上一篇幅中,简单介绍了 升讯威 Mapper( Sheng.Mapper)[http://www ...

随机推荐

  1. php运算时默认的类型转换

    php属于弱类型语言,使用数据时无需指定其数据类型.对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼. 总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算 ...

  2. [原]使用MessageAnalyzer实时查看远端日志

    1. 下载安装Message Analyzer 从Message Analyzer下载链接下载,安装过程从略. 说明:关于Message Analyzer的视频教程,可以在打开后的主界面上看到. 2. ...

  3. 现代3D图形编程学习--opengl使用不同的缓存对象(译者添加)

    现代3D图形编程学习系列翻译地址 http://www.cnblogs.com/grass-and-moon/category/920962.html opengl使用不同的缓存对象 在设置颜色一章中 ...

  4. Extjs6(特别篇)——项目自带例子main.js拆分详解

    本文基于extjs6.0.0 一.拆分代码来看看 1.主页面main是个tab页: 写一些页面的依赖: 标明页面的controller和viewModel Ext.define('Learning.v ...

  5. webmagic源码学习(一)

    最近工作主要是一些爬虫相关的东西,由于公司需要构建自己的爬虫框架,在调研过程中参考了许多优秀的开源作品,包括webmagic,webcollector,Spiderman等,通过学习这些优秀的源码获益 ...

  6. react 各种UI框架

    共计bfd-ui,react-amaze-ui,react-ant-design,react-material-ui,react-components,react-desktop,react-ui,s ...

  7. Oracle修改监听端口号1521[转]

    在oracle中,默认的监听端口号为1521,一旦有人扫描出这个端口号就会知道此服务器为oracle数据库服务器,存在极其大的安全隐患,在这里,教大家如何修改oracle默认端口号为9999: 1.查 ...

  8. python3 selenium 随机选择同一类型下的某一个元素

    使用场景: 如上图所示,有时候,我们测试的时候,不会每个方向都选择一遍,也不能每次都选择一个方向,这个时候就需要每次运行用例的时候,随机选择一个方向来测试 使用方法: random.randint() ...

  9. mysql语句insert后取到返回的主键id

    Q:   有时候做类似接口里的数据订正,需要取到insert语句返回的id主键,在程序里通过对象返回好取,但是写sql怎么取到呢? A:  用select @@identity得到上一次插入记录时自动 ...

  10. Ajax与Pjax请求在服务端是如何识别的

    我在后台处理ajax和一般的网页请求时,一般是需要额外加个参数进行区分的.比如使用get参数的is_ajax=1,后台判断有is_ajax=1成立时,表明该请求是ajax请求,遂可区分处理.我正在使用 ...