个人开发历程知识库

关注C++/Java/C#技术, 致力于安防监控/移动应用/WEB方面开发
------------------------------------ 业精于勤,荒于嬉;行成于思,毁于随
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# WinForm开发系列 - CheckBox/Button/Label/ProgressBar

Posted on 2009-06-07 18:01  peterzb  阅读(56527)  评论(30编辑  收藏  举报

   包含自定义颜色显示的CheckBox,水晶效果按钮,透明圆角Label,Vista效果的ProgressBar等控件(文章及相关代码搜集自网络,仅供参考学习,版权属于原作者! ).

1.自定义颜色显示的CheckBox coloredcheckcontrols.zip


2.逼真的仿Vista效果的按钮控件 crystalbutton.rar  VistaButton.rar

3.全定制的XP风格进度条

XpProgressBar功能特征

1. 不怎么占用CPU资源,因为使用了双缓冲的原因
2. 双缓冲提供了很好的平滑处理,不会闪烁
3. 文字使用Anti alias效果,更加好看
4. 使用文字阴影
5. 全定制功能

4.显示文字并能嵌入状态栏的进度条控件

5.A Rotator Control for WinForms

6.透明背景的垂直Label控件

翻译
randz. 著Extended Vertical Label Control in C# .NET

简介
本文描述如何在c#中创建一个透明背景色的垂直label用户控件。该用户控件允许你从底部或顶部开始绘制文字。

本文是Vertical Label Control in VB.NET的延续。其实,更准确的说,我是把他的工作翻译到C#中,并添加了从下向上显示文字的功能。另外,支持背景透明。

7.字体镶边的Label控件

翻译
cesarsouza. 著A Simple Label-like Control with Border Effect

简介

当我在做一些界面设计的时候,我发现我需要一种类似在字体周边加上边框的效果。不幸的是,不但.NET没有提供这种给字体镶上边框的效果,而且,我也没法在网上找到任何一个免费的实现。于是,我决定自己做一个。

 背景

开始,我打算通过在屏幕上绘制两次不同大小的文字来实现它。后来,我就把这篇文章发表到CodeProject上,并期望能有谁提出一个更好的解决办法。结果也真是如此,fwsouthern提出了很好的建议。主要的思想还是一样的,不过不再采用重叠文字的方法了,转而,采用GraphicPath, Brush以及其它效果,当然,后一种方法明显好多了。

我对于GDI+没有什么经验,不知道如何直接在屏幕上绘制图像,于是学习了Bob Powell的入门方法。

创建代码

现在,开始编码了,首先,我创建了一个继承于System.Windows.Forms.Control的组件,然后,重写了其OnPaint方法,添加了几个新的属性,以使其更有点label-like的感觉。

8.使用Vista风格的控件.NET 2.0

9.透明背景色的可定制移动字体Label控件

10.C#中Vista风格的进度条

11.类似于WinRAR压缩进度条 rarprogressbar.rar

12.自定义的OptionGroup OptionGroup.rar

13.SplitButton SplitButton.rar

14.垂直进度条控件 VerticalProgressBar.rar

15.程序加载时的旋转进度圈组件

[翻译]

Martin Gagne.How to write a loading circle animation in .NET?

[简介]

以前,大家都采用一个进度条显示程序正在加载。不过,这已经不再流行了。

看看SQL Server Management Studio ExpressWindows Media CenterEncarta 2006Firefox/IE7 加载页面时,都是采用一个不断旋转的圆,以显示程序正在载入。

程序加载时的旋转圈组件

16.多任务状态显示进度条列表(Vista风格,酷)

【翻译】

Igor VelikorossovStatus List

简介

本文的灵感来源于Shapour所写的文章"Status List - Vista Style"。

写这个项目和文章的原因是:
1.原来的项目是用VB.NET写的,不过我是一个C#的开发人员(尽管我经常而且能够很顺利地读VB或其它语言的代码,我还是忍不住想把它写出来)。
2.我发现原控件有不少的限制,因此决定修改并改进这个项目。

仿Vista多任务进度条

改进的地方

本项目的改进之处如下:
- StatusItem类称为Control的一个派生类,意味着它将继承父类Control的所有很好的特点。之所以做这些改动的原因是:这样能够使用item本身的paint,还不是由StatusList执行paint,这是更面向对象的方法。这个方法,还使得增加其它控件到其中,成为可能。(我还没有进一步测试这个假设,不过在我写这篇文章的时候,它真的可以。)

- 我不希望在任务item比较多的时候,如果向下滚动,就会隐藏掉头信息(heading)。我希望这条heading会一直可见。工程中也提供了一个隐藏heading的接口,如果你不需要的话,你可以隐藏掉heading。

- 我个人认为在list中的所有item应该是一个宽度的,这样看着更好看一些。你可以在设计器里移动或改变单个Item,不过控件会自动重新布置这些item。

- 我已经增加了一些事件:StatusItemAdded, StatusItemRemovedStatusItemStatusChanged,它们将给你足够的跟踪每一个item状态的适应

不同运行状态的任务

  


代码使用

代码的使用非常直接、简单,引用链接库(或直接加到你的VS IDE的toolbox上),然后在你的form上增加这个控件。属性控制器里,控件会展现足够的设置属性。

兴趣点


一个更妙的设计是给item容易加上3D框。你可以从StatusItemPane.cs中了解更多。
好笑的是,当我受困于这个设计,并花了好几个小时把它做出来之后,我发现最终的UI并不是我想要的那样。因此,默认情况下,边框是不被显示的。

还有好多的功能可以改进的(改善永无止境)。其中一个是StatusItem的一些虚拟属性(如图象,前景色)可以从对象中移出,单独放在一个类型的对象里。但,我想这就留给你来完成吧,或者在将来的某个时候再修改它(如果对它有足够的兴趣的话)。

我希望如果容器中的item比较多,用户能够使用鼠标滚轮滚动这些item。然而,至今为止,我还没有足够的时间在这个方向上做一些研究。如果谁有这样的解决方案,我愿意洗耳恭听。

历史

2007-04-23: 版本 1.0.0.0.

Credits
感谢Shapour的起源的思路。


原文作者Igor Velikorossov

点击此处看Igor Velikorossov的个人描述