有时候,我们直接用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;
}