c# 怎样禁止主窗口和其下的子窗口的移动 不使用FormBorderStyle.None
要求主窗口下有多个子窗口,根据不同的使用者可以更改窗口大小和位置(排版)。(此步骤已完成)当确定之后,按下锁定按键(自己定义的按键)后,就不能再更改大小和位置。解除锁定按...
要求
主窗口下有多个子窗口,根据不同的使用者可以更改窗口大小和位置(排版)。
(此步骤已完成)
当确定之后,按下锁定按键(自己定义的按键)后,就不能再更改大小和位置。
解除锁定按键后,可以更恢复可更改状态。
ps有例子更好 展开
主窗口下有多个子窗口,根据不同的使用者可以更改窗口大小和位置(排版)。
(此步骤已完成)
当确定之后,按下锁定按键(自己定义的按键)后,就不能再更改大小和位置。
解除锁定按键后,可以更恢复可更改状态。
ps有例子更好 展开
4个回答
展开全部
不想让窗口大小改变的话。
假设一个子窗体为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);
}
假设一个子窗体为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);
}
展开全部
简单啊
form有个事件叫Move(移动)
还有个事件叫LocationChanged(位置变化)
还有个事件叫RegionChanged(范围变化,包括位置和尺寸)
还有个事件叫SizeChanged(尺寸变化)
随便哪个事件里把 this.Region 或者 this.Location写死就可以了。 同理你也可以不让窗口大下变化。
form有个事件叫Move(移动)
还有个事件叫LocationChanged(位置变化)
还有个事件叫RegionChanged(范围变化,包括位置和尺寸)
还有个事件叫SizeChanged(尺寸变化)
随便哪个事件里把 this.Region 或者 this.Location写死就可以了。 同理你也可以不让窗口大下变化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置 主窗体的 Location 就行了 比如说 在 窗体的移动事件中 设置 this.Location=new Point(0,0);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在什么情况下要做到这样的禁止移动呢?为何要禁止移动呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询