winform提供了很多的控件可供选择,这其中最常用的如label,button,textbox等等,几乎出现在所有的winform中。但是有些时候又会想要自己开发一个控件。本文主要介绍了开发用户控件(继承自UserControl的控件)的基本流程。
首先建立一个工程:
可以看到已经自动为我们添加了一个叫做UserControl1的控件
那么进入正题:
一.为你的控件添加属性
自定义控件继承自UserControl类,因此本身就具有UserControl的许多属性。如果你想添加新的属性,那么只需在控件类中定义属性并公开即可:
随后我们可以在控件测试容器中看到该属性
注意:在控件代码中定义字段是如果赋初值,就会在测试容器中显示(如果为空则测试容器显示为空)
二.为你的控件添加事件,方法
添加方法是很简单的,只需要在你的控件代码中写一个公开的方法即可。
下面我们来说说添加事件:
代码如下
//定义委托 public delegate void MyEventHandle(object sender,EventArgs e); //定义事件 public event MyEventHandle MyEvent; //定义事件的触发条件,点击控件,触发MyEvent事件 private void UserControl1_Click(object sender, EventArgs e) { if (MyEvent != null) { MyEvent(sender, e); } }
事实上,定义委托这一步其实并不需要,因为winform为我们提供了EventHandler委托,通过MSDN可以看到其定义
因此实际上我们可以直接使用EventHandler来定义我们的事件
新建一个工程,将控件添加到form中,可以看到我们定义的事件:
这样,当你点击该控件的时候将会调用MyEvent事件
三.改变你控件的形状
通过重写onPaint方法,可以用GDI绘图自定义自己控件的形状
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.FillEllipse(Brushes.Green, 0, 0, this.Width, this.Height); base.OnPaint(e); }
然而通过这种方法并没有实质上改变控件的形状,即上面的控件在拖动到窗体使用时仍然占用的是一个矩形区域,关于这一点,只需要将属性BackColor设置为别的颜色就可以看到(事实上设置为Trasparent属性后基本可以避免绝大多数问题)
总结:我们已经讲完了用户控件的基本元素(属性,方法,事件)都是如何添加的,然而要开发自己的控件绝不是一件容易的事情,比如说要绘制图形,GDI绘图至少是基本了。此外,控件在测试容器中运行时没有进行大小的调整,而实际使用过程中这是无法避免的。因此也有必要对控件的Resize做一些编写(或者你可以放到使用控件的窗体中实现,但那肯定不如你在控件中实现更好)。