(十九)c#Winform自定义控件-停靠窗体

前提

入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

官网:https://www.hzhcontrols.cn

GitHub:https://github.com/kwwwvagaa/NetWinformControl

码云:HZHControls控件库: HZHControls控件库,c#的winform自定义控件,对触屏具有更好的操作支持,项目是基于framework4.0,完全原生控件开发,没有使用任何第三方控件,你可以放心的用在你的项目中(winfromcontrol/winformcontrol/.net)。还有更丰富的工业控件持续增加中~~~

如果觉得写的还行,请点个 star 支持一下吧

欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

目录

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值