1. 程式人生 > >C#:自定義控制元件筆記

C#:自定義控制元件筆記

 

以下操作是基於 Visual Studio 2017.

1.操作

先建立一個windows窗體應用。

右擊解決方案的名稱空間,新增一個類,不是新增一個使用者控制元件。

改這個類的程式碼,使之成為我們的 自定義控制元件。

2.程式碼如下:

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

namespace WindowsFormsApp11 {
    public class Class1 : Control {

        //這個一定要設定,不然邊框及填充繪製不出來
        protected override System.Drawing.Size DefaultSize{
            get {
                return new Size(100,100);
            }
        }

        //滑鼠進入時的填充顏色
        public Color HoverColor {
            get { return M_hoverColor; }
            set {
                M_hoverColor = value;
                Invalidate();
            }
        }

        //邊框顏色
        public Color BorrderColor {
            get {
                return myborderColor;
            }
            set {
                myborderColor = value;
            }
        }

        #region
        Color myborderColor = Color.Red;
        private bool isMouseEnter = false;
        Color M_hoverColor = Color.Black;
        #endregion

        protected override void OnMouseEnter(EventArgs e) {
            isMouseEnter = true;
            Invalidate();
            base.OnMouseEnter(e);
        }

        protected override void OnMouseLeave(EventArgs e) {
            isMouseEnter = false;
            Invalidate();
            base.OnMouseLeave(e);
        }

        public Class1() {
            //繪製控制元件外形
            GraphicsPath myPath = new GraphicsPath();//建立路徑物件
            myPath.AddEllipse(0, 0, Width, Height);//繪製圓形路徑(繪製函式可選System.Drawing.Drawing2D下的所有繪製函式)(注意:新繪製的控制元件大小要小於原控制元件)
            this.Region = new Region(myPath); //將路徑繫結到控制元件
        }

        protected override void OnPaint(PaintEventArgs e) {
            //填充背景的畫刷
            SolidBrush brush = new SolidBrush(BackColor);
            if (isMouseEnter) {
                brush.Color = HoverColor;
            }
            //繪製填充
            //e.Graphics.FillRectangle(brush,e.ClipRectangle); //矩形
            e.Graphics.FillEllipse(brush,new RectangleF(0,0,Width,Height)); //圓

            //繪製邊框
            GraphicsPath myPath = new GraphicsPath();//建立路徑物件
            myPath.AddEllipse(0, 0, Width, Height);//繪製圓形路徑(繪製函式可選System.Drawing.Drawing2D下的所有繪製函式)(注意:新繪製的控制元件大小要小於原控制元件)
            Pen pen = new Pen(BorrderColor);
            pen.Width = 5;
            e.Graphics.DrawPath(pen,myPath);

            
            base.OnPaint(e);
        }



    }

}

可以看到我們的新控制元件名字 是 Class1

然後重新生成解決方案,不然控制元件工具箱找不到我們自定義的控制元件。

隨便在一個窗體體中用我們的 Class1. 效果如下:

然後,將滑鼠移入區域,