Winform 开发用户控件

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做一些编写(或者你可以放到使用控件的窗体中实现,但那肯定不如你在控件中实现更好)。

猜你喜欢

转载自blog.csdn.net/codeeror/article/details/80380294