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

有时候,我们直接用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;
                        }
                        else {
                            this.Left = this.Parent.Width - 40;
                        }

                    }
                    else  //鼠标向左拖行
                    {
                        if (this.Left >= 2)
                        {
                            this.Left += e.X - startX;
                        }
                        else {
                            this.Left = 1;
                        }
 
                    }

                    if (e.Y > startY)//鼠标向下拖行
                    {
                        if (this.Top < this.Parent.Height - 40)
                        {
                            this.Top += (e.Y - startY);
                        }
                        else
                        {
                            this.Top = this.Parent.Height - 40; 
                        }

                    }
                    else//鼠标时想上拖行的
                    {
                        if (this.Top > 2)
                        {
                            this.Top += (e.Y - startY);
                        }
                        else
                        {
                            this.Top = 1;
                        }
                    }


                }//鼠标按下状态
            }//鼠标左键


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页