关于限制子窗体在父容器中移动边界的总结(很简单的东西,写给新人)

有时候,我们直接用MDI父窗体+MDI窗体可以方便的构建多文档应用,但在有些时候,我们不选择使用MDI窗体形式,可能是出于某些限制,比如,你需要在父窗体中使用控件,但老是把新建的子窗体给遮住,你选择使用panel对象来装一个窗口,可是因为窗体如果是有边框的,就会让输入焦点定位不准确,鼠标事件不能正确响应等等,你选择了自定义窗体来做子窗体,这个时候,你可能就会考虑到限制子窗体在父容器中如
摘要由CSDN通过智能技术生成

有时候,我们直接用MDI父窗体+MDI窗体可以方便的构建多文档应用,但在有些时候,我们不选择使用MDI窗体形式,

可能是出于某些限制,比如,你需要在父窗体中使用控件,但老是把新建的子窗体给遮住,你选择使用panel对象来装一个窗口,可是因为窗体如果

是有边框的,就会让输入焦点定位不准确,鼠标事件不能正确响应等等,你选择了自定义窗体来做子窗体,这个时候,你可能就会考虑到限制子窗体在父

容器中如何限制其移动的范围,如果不限制,当窗体移动到被其他控件遮住的地方,就永远回不来了,所以这里,我总结一个限制.

原理思路:移动窗体就是控制窗体的top和left属性,那么控制的时候,可以用下面的逻辑:

1.top和left分开写实现移动的代码

2.首先判断鼠标拖动的方向

3.在方向里面限制这个方向拖动的对应的极限边缘时哪里(值是多少?)

4.反过来判断另外一边

下面附上这段代码[放在对应窗体的mouseMove事件中],startX和startY是鼠标按下的时候,记录的位置

 
 if (e.Button == MouseButtons.Left)
            {
                if (mouseDowning == true)
                {
                    if (e.X > startX) //鼠标向右拖动
                    {
                        if (this.Left < this.Parent.Width - 40)
                        {
                            this.Left += e.X - startX;
                        }
              
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值