C#控件的出现,让界面UI的操作的重用得到很大的提高,对开发效率的提高很有积极的意义,但是很多时候.net frame自带的控件和第三方控件都难以满足我们自己的开发需求,这个时候我们可以使用.net的自定义控件,来开发属于自己的控件。甚至可以加入VS 的工具箱,像使用自带控件一样,随心所欲的拖动得到自己的要求。
要开发C#控件,首先就需要了解什么是控件,控件实现的基本原理是什么,然后根据这些原则,我们进行若干个控件的开发实践,我们就可以进行自己的控件开发。
首先、什么是控件?
控件其实是一组从System.Winddows.Controls或者其子类继承得来暴露给用户一些字段或者方法,可以直接通过拖拉来被重用的类库。(以上概念是我根据自己的理解总结的,如果有不准确的地方,欢迎大家拍砖)。
从控件的定义,我们得到需要从Controls或者其子类继承来开发控件。在.net的开发中自己开发的WinForm控件通常有三种类型:复合控件(Composite Controls),扩展控件(Extended Controls),自定义控件(Custom Controls)。
复合控件:将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。
扩展控件:在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或者修改原有控件的控能。
自定义控件:直接从System.Windows.Forms.Control类派生出来。Control类提供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的方法,但是对开发者的要求也比较高,你必须为Control类的OnPaint事件写代码。所以至少你需要了解和学习GDI+的使用,通过GDI简单学习资料,你可以下载到一份简单的GDI+学习资料,可以带领你入门,更高级的C#GDI+编程你可以查阅相关的资料。
其次、控件实现的原理。
在这系列文章中,我们主要讲解UI窗体控件,而这一些的控件的基本原理都是暴露一些属性、方法和事件给用户,然后用户通过这一系列的属性、方法和事件来达到和控件之间的交互,而控件通过OnPaint(PaintEventArgs e)方法的执行,把结果通过GDI+或者其他行为,展示在窗体(控件)上。
通过控件的实现原理,我们知道我们要使用控件开发,则需要实现一些公开的方法、事件、属性,并且实现OnPaint方法。
根据对控件和控件原理的理解,我们来做一个简单的小控件。来从代码的级别来理解下控件的实现。
意图:我们做一个类似Label的控件,可以实现通过Text的设置,来显示出来这些文字:
首先我们来新建一个控件类库:
在选择了Windows窗体控件库以后,默认会带有一个用户控件,因为我们要开发的是一个自定义控件,所以可以把这个文件删掉。
在打开的文件中我们鼠标点击右键,选择查看代码:因为本代码非常简单,所以就不啰嗦了,带注释贴在上面:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace NewLabel { public partial class NewLabel : Control { public NewLabel() { InitializeComponent(); } private string _text = ""; private Graphics g; [Description("内容"),Category("Appearance")] public new string Text { get { return _text; } set { _text = value; } } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); g = this.CreateGraphics(); g.DrawString(_text, this.Font, new SolidBrush(Color.Black), new PointF(0, 0)); } public void Dispose(){ g.Dispose(); } } }
以上代码在vs 2008中实现。
咱们可以通过编译后,来添加一个测试项目。
即可测试咱们想要的效果。
如果你在看这篇文章的话,说明你是一个技术。那么你一定不愿意错过这篇文章,欢迎去看看
http://blog.csdn.net/aofengdaxia/archive/2010/10/15/5944193.aspx