问题描述
如图,把一个窗体放在在容器里,鼠标可以拖动窗体显示到父容器外,如何不让窗体移动到父容器外呢?有一种方法是当移动到父容器外时,修改父容器属性AutoScroll=true,但这样会给父容器添加滚动条,,还有没有其他的方法呢?
解决方案
本帖最后由 lienguo 于 2015-09-30 10:14:40 编辑
解决方案二:
没人吗
解决方案三:
把子窗口的边框去掉,标题栏去掉。窗口弹出都不让拖动。
解决方案四:
usingSystem;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}protectedoverridevoidOnShown(EventArgse){base.OnShown(e);if(TopLevel){varfrm=newForm1();frm.TopLevel=false;frm.LocationChanged+=(sender,e1)=>{varb=frm.Bounds;b.Intersect(ClientRectangle);frm.Bounds=b;};Controls.Add(frm);frm.Show();}}}}
解决方案五:
判断一下,如果坐标跑到外面,就修改回来,不就得了
解决方案六:
指定Parent属性
解决方案七:
引用4楼Z65443344的回复:
判断一下,如果坐标跑到外面,就修改回来,不就得了
你的办法我考虑过,但都不是想要的效果。。。。。。
解决方案八:
引用6楼lienguo的回复:
Quote: 引用4楼Z65443344的回复:
判断一下,如果坐标跑到外面,就修改回来,不就得了你的办法我考虑过,但都不是想要的效果。。。。。。
那你得说清楚想要什么效果啊,不让跑出去,又不能出滚动条,又不能修改位置,那你是要怎样
解决方案九:
引用6楼lienguo的回复:
Quote: 引用4楼Z65443344的回复:
判断一下,如果坐标跑到外面,就修改回来,不就得了你的办法我考虑过,但都不是想要的效果。。。。。。
话说,你得判断到底是哪个方向跑出去了,哪个方向跑出去,就修改那个方向的位置向左跑出去,就得把x坐标设置成0,向上跑出去,就要把y坐标设置成0向右跑出去,就得把x坐标设置成主窗体宽度-子窗体宽度否则当然是不管哪边跑出去,都一下蹦回屏幕中间了
解决方案十:
给你写个简单的示例代码:intmaxX=this.Parent.Width-this.Width;intmaxY=this.Parent.Height-this.Height;intx=this.Location.x;inty=this.Loaction.y;boolneedToChangeLocation=false;if(x<0){x=0;needToChangeLocation=true;}if(y<0){y=0;needToChangeLocation=true;}if(x>maxX){x=maxX;needToChangeLocation=true;}if(y>maxY){y=maxY;needToChangeLocation=true;}if(needToChangeLocation){this.Loaction=newPoint(x,y);}
把这段代码放到LocationChanged事件里去,位置一变就执行
解决方案十一:
用c#代码,让form_child.mdiparent=form_parent
解决方案十二:
问度娘,搜索mdi窗体