使用C#编写一个自定义控件

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace WindowsControlLibrary1
{
    ///
    /// UserControl1 的摘要说明。
    ///
    public class UserControl1 : System.Windows.Forms.UserControl
    {
        ///
        /// 必需的设计器变量。
        ///
        private System.ComponentModel.Container components = null;

        /// 私有域
        private string MyText;
        //存储关联的事件处理方法;
        private EventHandler OnMyTextChanged;
        public UserControl1()
        {
            // 该调用是 Windows.Forms 窗体设计器所必需的。
            InitializeComponent();

            // TODO: 在 InitializeComponent 调用后添加任何初始化
            MyText = "Static Control";
            OnMyTextChanged = null;
        }

        ///
        /// 清理所有正在使用的资源。
        ///
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                    components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code
        ///
        /// 设计器支持所需的方法 - 不要使用代码编辑器
        /// 修改此方法的内容。
        ///
        private void InitializeComponent()
        {
            //
            // UserControl1
            //
            this.Name = "UserControl1";
            this.Size = new System.Drawing.Size(248, 128);
            this.Load += new System.EventHandler(this.UserControl1_Load);
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserControl1_Paint);

        }
        #endregion

        private void UserControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            SizeF textSize = e.Graphics.MeasureString(MyText, Font);
            float xPos = (ClientRectangle.Width / 2) - (textSize.Width / 2);
            float yPos = (ClientRectangle.Height / 2) - (textSize.Height / 2);
            e.Graphics.DrawString(MyText, Font, new SolidBrush(Color.Black), xPos, yPos);
        }

        private void UserControl1_Load(object sender, System.EventArgs e)
        {
        }

        //公开属性
        public String ControlText
        {
            get
            {
                return MyText;

            }
            set
            {
                MyText = value;
                //重画
                Invalidate();
                //如果关联了事件处理方法,则调用该方法
                if (OnMyTextChanged != null)
                {
                    OnMyTextChanged.Invoke(this, EventArgs.Empty);
                }
            }

        }

        //声明了一个公开事件
        public event EventHandler MyTextChanged
        {
            add
            {
                OnMyTextChanged += value;
            }
            remove
            {
                OnMyTextChanged = value;
            }
        }
    }
}
Contributors: FHL