c# 怎样禁止主窗口和其下的子窗口的移动 不使用FormBorderStyle.None

要求主窗口下有多个子窗口,根据不同的使用者可以更改窗口大小和位置(排版)。(此步骤已完成)当确定之后,按下锁定按键(自己定义的按键)后,就不能再更改大小和位置。解除锁定按... 要求
主窗口下有多个子窗口,根据不同的使用者可以更改窗口大小和位置(排版)。
(此步骤已完成)
当确定之后,按下锁定按键(自己定义的按键)后,就不能再更改大小和位置。
解除锁定按键后,可以更恢复可更改状态。
ps有例子更好
展开
 我来答
雨兰吟G
2012-01-21 · TA获得超过1082个赞
知道小有建树答主
回答量:282
采纳率:100%
帮助的人:445万
展开全部
不想让窗口大小改变的话。
假设一个子窗体为childForm。子窗体类为MCForm。
可以在锁定时设置:
childForm.Tag = new Size[] { childForm.MaximumSize, childForm.MinimumSize }; //保存原来的最大最小限制
childForm.MaximumSize = childForm.Size;
childForm.MinimumSize = childForm.Size;
childForm.MaximizeBox=false; //禁止最大化和最小化按钮,虽然有其他方法,但是麻烦。。。
childForm.MinimizeBox = false;
这样就不能改变大小了,然后解锁时:
childForm.MaximumSize=(childForm.Tag as Size[])[0];
childForm.MinimumSize = (childForm.Tag as Size[])[1];
childForm.MaximizeBox=true;
childForm.MinimizeBox = true;
这样就可以又改变大小了。
禁止移动的话,首先添加一个变量来记录是否锁定(主窗口和子窗口都要有)。
public bool formLocked=false;
锁定时(主窗口中):
formLocked=true;
foreach (MCForm f in MdiChildren)
{
f.formLocked=true;
}
解锁时(主窗口中):
formLocked=false;
foreach (MCForm f in MdiChildren)
{
f.formLocked=false;
}
然后
添加如下覆盖函数(主窗体和子窗体都要有),就可以禁止窗体移动
protected override void WndProc(ref Message m)
{
if (formLocked && m.Msg == 0x0112 && m.WParam == (IntPtr)0xF012) //系统命令,移动窗体
{
return; //不响应
}
base.WndProc(ref m);
}
biubiubiubiubiu5biu
2012-01-20 · TA获得超过1647个赞
知道小有建树答主
回答量:1126
采纳率:0%
帮助的人:1163万
展开全部
简单啊
form有个事件叫Move(移动)
还有个事件叫LocationChanged(位置变化)
还有个事件叫RegionChanged(范围变化,包括位置和尺寸)
还有个事件叫SizeChanged(尺寸变化)
随便哪个事件里把 this.Region 或者 this.Location写死就可以了。 同理你也可以不让窗口大下变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
___Tu鹫
2012-01-20
知道答主
回答量:15
采纳率:0%
帮助的人:6.9万
展开全部
设置 主窗体的 Location 就行了 比如说 在 窗体的移动事件中 设置 this.Location=new Point(0,0);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尉迟丶九方
2012-01-20 · TA获得超过148个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:186万
展开全部
你在什么情况下要做到这样的禁止移动呢?为何要禁止移动呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式