C#:自定義控制元件筆記
阿新 • • 發佈:2018-12-08
以下操作是基於 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. 效果如下:
然後,將滑鼠移入區域,