[GduUI类库]C# WinForm控件分享

问题描述

前段时间我发了个帖子,分享了我自己写的一个C#UI类库,演示了窗体类GMForm实现的效果,大家可以再看看。现在类库增加了几个控件,同样分享给大家。这几个控件分别是:GMVScrollBar,GMHScrollBar,GMTrackBar,GMProgressBar,GMRollingBar。这些控件与GMForm窗体一样,都可以通过相应的XTheme来配置出不同的形状和外观,而且支持运行时动态切换。下面看看这些控件的效果图。主界面GMScrollBar效果,上面这些不同形状,不同外观的滚动条都是通过XTheme来配置的。GMTrackBar效果GMProgressBar效果GMRollingBar效果这些控件都是继承自System.Windows.Forms.Control类的,不是继承系统的ScrollBar,TrackBar等类。控件上面的按钮,滚动块等元素都是通过GDI+自绘的,所以原理并不复杂,主要是看你对控件自身功能的了解程度,以及对GDI+的熟悉和熟练程度。这里说明一下GMScrollBar与系统ScrollBar几点差别:(1)对系统ScrollBar,如果LargeChange属性值大于1,那么ScrollBar的最大值是无法通过拖动滚动块来达到的。不知道微软为什么这样做,但我觉得这对使用者来说是很麻烦的,所以GMScrollBar没有这一限制,滚动块拖到最上面就能得到最小值,拖到最下面就得到最大值。(2)对系统ScrollBar,滚动块占滚动条长度百分比是由LargeChange属性值来影响的,GMScrollBar是单独通过MiddleButtonLengthPercentage来设置的。(3)系统ScrollBar同时提供了ValueChanged和Scroll两个事件,但由于这两个事件是一样的,所以GMScrollBar只提供了ValueChanged事件。现在类库的代码量已经超过了一万行,这些代码中,只有一个地方的代码不是我写的,那就是WinAPI类里面WindowsMessage常量定义,API32函数声明,以及相应函数参数常量声明,这些代码是我从MSDN网站,或者其它开源项目中复制过来的,因为这部分代码确实没有必要自己写,而且我也写不了。这部分的代码不到500行。除此之外,类库其它地方的所有代码都是我自己写的。也就是类库超过95%的代码都是原创的,是我一行一行写出来的。类库中窗体及各控件都内置了若干主题,这些主题大部分是模仿现有软件的,只有少数几个是我自己试出来,觉得可以就保留的。使用时,只要实例化这些主题类,并赋给控件的XTheme属性,就能使控件拥有完全不同的外观。类库不提供开发文档,目前也没有开发文档,只有一个文本格式的介绍各控件公开的属性、事件、方法的文件。如果谁对类库感兴趣,需要开发文档的,可以通过邮件联系我,如果需要的人多,我会完善一份开发文档,对类库进行详细的介绍,并给代码添加尽量多的注释。我现在已经把我辛辛苦苦写的代码毫无保留的奉献出来了,所以开发文档是绝对不再免费提供的。

解决方案

本帖最后由 ping3108 于 2014-09-02 19:07:17 编辑
解决方案二:

解决方案三:
感谢你的分享!
解决方案四:
这个要支持
解决方案五:
该回复于2015-10-31 23:39:53被版主删除
解决方案六:
感谢分享.....
解决方案七:
虽然界面在美观上还需要优化。不过相当的不错。楼主继续优化可以当作商业的来出售了。
解决方案八:
这个不错收藏一下
解决方案九:
界面做起来特别不容易,因为细小的问题都很容易被用户发现。所以要支持下lz。
解决方案十:
前来学习~~
解决方案十一:
该回复于2015-10-31 23:44:35被版主删除
解决方案十二:
分享好东西就要顶
解决方案十三:

解决方案十四:
谢谢楼主分享
解决方案十五:
该回复于2015-10-31 23:45:14被版主删除
解决方案:
解决方案:好东西必须支持啊
解决方案:看起来不错的样子
解决方案:
解决方案:我也不喜欢用N多控件拼装,我也喜欢全部绘制.
解决方案:看到好资源就滚进来了。。。。感谢楼主分享
解决方案:学习了,感谢分享!
解决方案:开源的?不如放到git上
解决方案:引用6楼zanfeng的回复:

虽然界面在美观上还需要优化。不过相当的不错。楼主继续优化可以当作商业的来出售了。

感谢支持及建议。
解决方案:引用8楼caozhy的回复:

界面做起来特别不容易,因为细小的问题都很容易被用户发现。所以要支持下lz。

是的,哪怕是一个像素的偏差,一个行为响应有问题,只要被发现了,用户心里可能就感到不舒服。所以做界面的人必须控制好每一个像素,让控件的每个像素,每个行为,都是设计之时所期望的。而要做到这一点,设计或开发人员必须至少做到:一是对控件的功能和行为十分了解,二是认真考虑控件上各元素的大小、间距、边界空白等,三是能熟练使用GDI+各种绘图属性及方法来绘制出所需的结果,四是考虑控件在初始化以及被用户缩放到极大或极小时是否会产生异常。
解决方案:引用22楼rrrfff的回复:

开源的?不如放到git上

现在是开放源代码的,但是不保证后面的继续提供源码,或者保证能继续维护,所以放到专门的开源平台上不合适。现在只是出于兴趣才开发这个类库的,如果类库没有找到收益点,或者没有其它方面的支持,可能就不维护了,或者更新周期很长。
解决方案:必须支持呀!
解决方案:引用19楼dylike的回复:

我也不喜欢用N多控件拼装,我也喜欢全部绘制.

是啊。而且有时候自行绘制是必须的。试想一个支持CheckBox的ListBox,如果你不自己在ListBox上绘制CheckBox,而是加真正的CheckBox控件,那么用户在ListBox里添加1000项,你就要在内存里New出1000个CheckBox控件,这要耗多少内存。
解决方案:支持分享精神,winform,如果弄成无边框的,是不是很多事件都要自己去处理?
解决方案:要支持,贡献的精神是无私的,帮助很多后来人。不顶的写代码一堆bug
解决方案:
解决方案:楼主既然都把代码共享出来了,为什么不发布到code.csdn.net或者github上面去?让那些有兴趣的人都可以参与到这个开源项目来
解决方案:引用28楼linxiaocao的回复:

支持分享精神,winform,如果弄成无边框的,是不是很多事件都要自己去处理?

这点你可以参考CSharp程序员之窗的一个例子:,把这例子搞清楚后你就明白怎么做了。
解决方案:引用31楼vb763305825的回复:

楼主既然都把代码共享出来了,为什么不发布到code.csdn.net或者github上面去?让那些有兴趣的人都可以参与到这个开源项目来

不保证后面的还开源。
解决方案:感谢楼主分享!
解决方案:不错,很好!帮楼主顶起。
解决方案:点赞。做的很好。目前正在看学习学习
解决方案:就是楼主没有写注释的习惯
解决方案:大神。先膜拜,然后屁颠的跑去下载!
解决方案:还不错,谢谢分享,。
解决方案:该回复于2015-10-31 23:56:28被版主删除
解决方案:这个肯定要顶。
解决方案:这个要支持
解决方案:测试了一下,在一个循环里面给那个圆形进度条赋值,但是发现那个圆形的进度条控件会不停的闪烁,是什么问题呢?
解决方案:wpf很适合做这些啊,WinForm落后了,这方面自绘比较困难。
解决方案:不错啊~哥们,有在更新>A<!!!看来我也要花段时间重整下了。。。我代码太臃肿了,是时候整理了QAQ。。。
解决方案:引用楼主ping3108的回复:

我现在已经把我辛辛苦苦写的代码毫无保留的奉献出来了,所以开发文档是绝对不再免费提供的。

搞不懂你这是何必?
解决方案:感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~感谢楼主~
解决方案:引用43楼chenpeng0118的回复:

测试了一下,在一个循环里面给那个圆形进度条赋值,但是发现那个圆形的进度条控件会不停的闪烁,是什么问题呢?

把你的循环代码贴出来看看。
解决方案:引用46楼sp1234的回复:

Quote: 引用楼主ping3108的回复:
我现在已经把我辛辛苦苦写的代码毫无保留的奉献出来了,所以开发文档是绝对不再免费提供的。

搞不懂你这是何必?

开发文档没有随代码一起写,都是记录在草稿上,包括图例,算法分析等,如果把这些整理成正式文档,还需要花很多精力和时间。所以这部分应该作为有偿劳动。
解决方案:引用44楼cangyue080180的回复:

wpf很适合做这些啊,WinForm落后了,这方面自绘比较困难。

WPF在国内用的很少,你在各大招聘网站搜下WPF方面的工作,看出来的结果就知道了。在国内做开发也要看国内的趋势,除非你自己用WPF能欣起巨浪。

时间: 2024-08-01 21:57:16

[GduUI类库]C# WinForm控件分享的相关文章

C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法_C#教程

本文实例讲述了C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法.分享给大家供大家参考,具体如下: 在Winform中如果将一个透明图片放在窗体上能正常显示透明,但是如果将该图片放在另一个控件上会导致不能显示透明效果. 解决这种情况,可以采取在控件上使用GDI+绘画出透明图片. 这里我们就以一个pictureBox2控件上面重叠一张png透明图片为例: 我们只需要给pictureBox2控件添加Paint事件,然后对png透明图片进行绘制即可,代码如下: private voi

在IE中使用VS.net WinForm控件

控件 在Visual Studio .net中,类似于Applet或ActiveX控件,WinForm控件可以嵌入IE中使用.嵌入IE的Windows窗体控件不要求注册,不需用户提示即可激活.我们可以很方便地实现一些WebForm中实现起来相对麻烦的交互操作,结合.net Remoting等技术访问后台数据库,则可生成功能强大而且美观的WebForm页面. 使用该技术,需要客户端安装.net FrameWork及IE 6.0,在Windows 2003中已经自带了.net FrameWork.

c#扩展方法奇思妙用高级篇六:WinForm控件选择器

我们先看几个类图,深入认识一下我们常用的WinForm控件: 图1 ScrollableControl类图 图2 ButtonBase类图 图3 TextBoxBase类图 图4 ListControl类图 图5 Label类图 图6 其它常用 从图1中可以看出,Form与Button.Label一样,也是一个Control.

WinForm控件开发总结系列文章目录

WinForm控件开发总结(十二) 让控件处理导航键 WinForm控件开发总结(十一) 调试控件的设计时行为 WinForm控件开发总结(十) 为属性设置默认值 WinForm控件开发总结(九) 为属性提下拉式属性编辑器 WinForm控件开发总结(七) 为复杂属性的子属性提供编辑功能 WinForm控件开发总结(八) 为属性提供弹出式编辑对话框 WinForm控件开发总结(六) 控件属性类型转换器代码详解 WinForm控件开发总结(五) 为控件的复杂属性提供类型转换器 WinForm控件开

WinForm控件开发总结(十二) 让控件处理导航键

最近真的真的太忙了,以至于一个多月都没哟更新我的blog.昨天晚上,一个网上的朋友看了我的 ToolBox的文章,问我一个问题,他说如何让ToolBox控件也能响应键盘操作,也就是用Up,down按键来选 择工具箱控件里的Item,他添加了键盘事件,但是不起作用.一开始做这个控件的时候也只是演示一下控 件的制作过程,只用了很短的时间做了一个,只考虑了用鼠标选取,没有考虑键盘操作,我想要添加键盘 操作无非重载KeyDown事件,针对Up,Down做一些响应就可以了.可是添加了重载了OnKeyDow

WinForm控件开发总结(十) 为属性设置默认值

本系列的前面几篇文章讲解了如何来定义属性以及更有效的编辑属性,接下来我要讲一下控件属性的默 认值.如果我们希望自己开发的控件更易于被其它开发者使用,那么提供默认值是非常值得的. 如果你为属性设定了默认值,那么当开发者修改了属性的值,这个值在Property Explorer中将会以粗 体显示.VS为属性提供一个上下文菜单,允许程序员使用控件把值重置为默认值.当VS进行控件的串行化 时,他会判断那些值不是默认值,只有不是默认值的属性才会被串行化,所以为属性提供默认值时可以大 大减少串行化的属性数目

WinForm控件开发总结(七) 为复杂属性的子属性提供编辑功能

前面的几篇文章中,我们给控件添加一个复杂的类型Scope,并且给它的类型提供的一个类型转换器, 现在我们可以在属性浏览器中编辑它的值,并且它的值也被串行化的源代码里了.但是你有没有发现,在 属性浏览器里编辑这个属性的值还是不太方便.因为属性只是"10,200"这种形式的,所以,你必须按 照这种格式来修改,一旦格式错误就会引发异常,比如输入一个"10200".我们期望这个属性的每一子 属性都能够被独立的编辑就好了,这并非不能实现,而且实现还很简单. 为了在属性浏览器里

WinForm控件开发总结(五) 为控件的复杂属性提供类型转换器

上一篇文章我已经介绍了TypeConverterAttribute元数据的作用,本文将通过代码向你展示具体的实 现.在这个例子中,我要给控件添加一个复杂的属性,这个属性对这个控件没有什么功用,纯粹是为了演 示,有些牵强附会了. 现在在前一篇文章中的创建的控件代码中添加一个Scope属性: [Browsable(true)] public Scope Scope { get { return _scope; } set { _scope = value; } } 这个属性的类型是Scope类,代码

WinForm控件开发总结(四) 控件属性的串行化

前一篇文章介绍了常用的设计时Attribute.其中BrowsableAttribute,CategoryAttribute, DescriptionAttribute,DefaultPropertyAttribute,DefaultEventAttribute都是比较简单的,也是可 有可无,但是为了提供更好的用户体验这些Attribute最好不要省掉,如果你对这些Attribute还不熟悉, 可以参考我前一篇文章的描述或者查看MSDN,这里我就不在赘述了. 下来我们主要介绍一下Designer