如何让子窗体不移动出父容器的范围

SuperLampard 2015-09-30 10:13:57
如图,把一个窗体放在在容器里,鼠标可以拖动窗体显示到父容器外,如何不让窗体移动到父容器外呢?
有一种方法是当移动到父容器外时,修改父容器属性AutoScroll = true,但这样会给父容器添加滚动条,,还有没有其他的方法呢?
...全文
199 点赞 收藏 11
写回复
11 条回复
小灰狼 2015年10月09日
问度娘,搜索 mdi 窗体
回复 点赞
王者的陨落 2015年10月09日
用c#代码,让form_child.mdiparent=form_parent
回复 点赞
SuperLampard 2015年09月30日
引用 4 楼 Z65443344 的回复:
判断一下,如果坐标跑到外面,就修改回来,不就得了
你的办法我考虑过,但都不是想要的效果。。。。。。
回复 点赞
xuzuning 2015年09月30日
指定 Parent 属性
回复 点赞
於黾 2015年09月30日
判断一下,如果坐标跑到外面,就修改回来,不就得了
回复 点赞
phommy 2015年09月30日
using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void OnShown(EventArgs e) { base.OnShown(e); if (TopLevel) { var frm = new Form1(); frm.TopLevel = false; frm.LocationChanged += (sender, e1) => { var b = frm.Bounds; b.Intersect(ClientRectangle); frm.Bounds = b; }; Controls.Add(frm); frm.Show(); } } } }
回复 点赞
exception92 2015年09月30日
把子窗口的 边框去掉,标题栏去掉。窗口弹出 都不让拖动。
回复 点赞
SuperLampard 2015年09月30日
没人吗
回复 点赞
於黾 2015年09月30日
给你写个简单的示例代码:

int maxX=this.Parent.Width-this.Width;
int maxY=this.Parent.Height-this.Height;
int x=this.Location.x;
int y=this.Loaction.y;
bool needToChangeLocation=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=new Point(x,y);
}
把这段代码放到LocationChanged事件里去,位置一变就执行
回复 点赞
於黾 2015年09月30日
引用 6 楼 lienguo 的回复:
[quote=引用 4 楼 Z65443344 的回复:] 判断一下,如果坐标跑到外面,就修改回来,不就得了
你的办法我考虑过,但都不是想要的效果。。。。。。[/quote] 话说,你得判断到底是哪个方向跑出去了,哪个方向跑出去,就修改那个方向的位置 向左跑出去,就得把x坐标设置成0,向上跑出去,就要把y坐标设置成0 向右跑出去,就得把x坐标设置成主窗体宽度-子窗体宽度 否则当然是不管哪边跑出去,都一下蹦回屏幕中间了
回复 点赞
於黾 2015年09月30日
引用 6 楼 lienguo 的回复:
[quote=引用 4 楼 Z65443344 的回复:] 判断一下,如果坐标跑到外面,就修改回来,不就得了
你的办法我考虑过,但都不是想要的效果。。。。。。[/quote] 那你得说清楚想要什么效果啊,不让跑出去,又不能出滚动条,又不能修改位置,那你是要怎样
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告