前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
官网:https://www.hzhcontrols.cn
GitHub:https://github.com/kwwwvagaa/NetWinformControl
如果觉得写的还行,请点个 star 支持一下吧
目录
https://www.cnblogs.com/bfyx/p/11364884.html
准备工作
这是一个可停靠在指定位置或停靠在某个控件旁边的无焦点窗体,市区焦点会关闭
开始
添加一个Form,命名为FrmAnchor,实现接口IMessageFilter
有2个构造函数
1 #region 构造函数 2 /// <summary> 3 /// 功能描述:构造函数 4 /// 作 者:HZH 5 /// 创建日期:2019-02-27 11:49:08 6 /// 任务编号:POS 7 /// </summary> 8 /// <param name="parentControl">父控件</param> 9 /// <param name="childControl">子控件</param> 10 /// <param name="deviation">偏移</param> 11 public FrmAnchor(Control parentControl, Control childControl, Point? deviation = null) 12 { 13 m_parentControl = parentControl; 14 InitializeComponent(); 15 this.Size = childControl.Size; 16 this.HandleCreated += FrmDownBoard_HandleCreated; 17 this.HandleDestroyed += FrmDownBoard_HandleDestroyed; 18 this.Controls.Add(childControl); 19 childControl.Dock = DockStyle.Fill; 20 Point p = parentControl.Parent.PointToScreen(parentControl.Location); 21 int intX = 0; 22 int intY = 0; 23 if (p.Y + parentControl.Height + childControl.Height > Screen.PrimaryScreen.Bounds.Height) 24 { 25 intY = p.Y - childControl.Height - 1; 26 blnDown = false; 27 } 28 else 29 { 30 intY = p.Y + parentControl.Height + 1; 31 blnDown = true; 32 } 33 34 if (p.X + childControl.Width > Screen.PrimaryScreen.Bounds.Width) 35 { 36 intX = Screen.PrimaryScreen.Bounds.Width - childControl.Width; 37 38 } 39 else 40 { 41 intX = p.X; 42 } 43 if (deviation.HasValue) 44 { 45 intX += deviation.Value.X; 46 intY += deviation.Value.Y; 47 } 48 this.Location = new Point(intX, intY); 49 } 50 51 public FrmAnchor(Control parentControl, Size size, Point? deviation = null) 52 { 53 m_parentControl = parentControl; 54 InitializeComponent(); 55 this