【Winform-自定义控件】自定义控件学习+一个笑脸控件例子

1.CompositeControls组合控件:在原有控件的基础上根据需要进行组合

2.ExtendedControls 扩展控件:继承自原有控件,添加一些新的属性和方法,绘制一些新元素

当每个Button都使用一样的样式,可以使用自定义控件统一设置控件的属性、方法。

using System;
using System.Windows.Forms;
using System.Drawing;

public class TouchscreenButton : Button
{
    public TouchscreenButton()
    {
        this.Width = 100;
        this.Height = 75;
        this.FlatStyle = FlatStyle.Flat;
        this.Cursor = Cursors.Hand;
        this.ForeColor = Color.Black;
        this.BackColor = Color.White;
        this.FlatAppearance.BorderSize = 2;
        this.FlatAppearance.BorderColor = Color.Navy;
    }
}

3.CustomControls自定义控件:控件的绘制全部由用户定义

一个可爱的笑脸控件

    public partial class Smiley : Control
    {

        public enum SampleColours
        {
            Red,
            Green,
            Blue,
            Yellow
        }
        //创建一个枚举类型的属性,则这个属性可以进行选择
        private SampleColours _smileyColor; 
        public SampleColours SmileyColor
        {
            get { return _smileyColor; }
            set { _smileyColor = value; }
        }

        private string _smileyName;
        public string SmileyName
        {
            get { return _smileyName; }
            set { _smileyName = value; }
        }

        public Smiley()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            //选择背景颜色
            Color back;
            switch (_smileyColor)
            {
                case SampleColours.Blue:
                    back = Color.Blue;
                    break;
                case SampleColours.Green:
                    back = Color.Green;
                    break;
                case SampleColours.Red:
                    back = Color.Red;
                    break;
                default:
                    back = Color.Yellow;
                    break;
            }
            Brush background = new SolidBrush(back);

            //画背景
            pe.Graphics.FillEllipse(background, 0, 0, this.Width - 1, this.Height - 1);
            //左眼
            pe.Graphics.FillEllipse(Brushes.Black, (this.Width / 4), (this.Height / 4), (this.Width / 6), (this.Height / 6));
            //右眼
            pe.Graphics.FillEllipse(Brushes.Black, this.Width - (this.Width / 3) - 10, (this.Height / 4), (this.Width / 6), (this.Height / 6));
            //
            pe.Graphics.DrawArc(Pens.Black, (this.Width / 4), (this.Height / 2), (this.Width / 2), (this.Height / 4), 0, 180);

            // Calling the base class OnPaint
            base.OnPaint(pe);
        }
    }