我不是要求为我编写代码,而是要写一条路径。
我正在寻找一种方法来防止表单因离开父表单的边界而打开。
比如保持两个表单都打开,但不允许打开另一个表单 通过该程序离开其他程序的范围。最好的例子 就像一个操作系统。
我的意思是:
谢谢,任何进一步的问题请问! 奥斯汀
答案 0 :(得分:2)
MDI解决方案是一个起点,但子mdi表单仍然可以移动到父MDI表单的可见窗口的边界之外。要解决此问题,您需要向子MDI表单添加一个事件处理程序,以便在移动每个子窗口后,它仍然包含在父MDI表单中。
以下示例代码来自MSDN论坛上的一个非常古老的问题,但仍然像魅力一样:)来源:https://social.msdn.microsoft.com/Forums/windows/en-US/46e35e80-7bfa-447a-9655-965134124f70/prevent-child-form-from-leaving-parent-form-bounds?forum=winforms
protected override void OnMove(EventArgs e)
{
//
// Get the MDI Client window reference
//
MdiClient mdiClient = null;
foreach(Control ctl in MdiParent.Controls)
{
mdiClient = ctl as MdiClient;
if(mdiClient != null)
break;
}
//
// Don't allow moving form outside of MDI client bounds
//
if(Left < mdiClient.ClientRectangle.Left)
Left = mdiClient.ClientRectangle.Left;
if(Top < mdiClient.ClientRectangle.Top)
Top = mdiClient.ClientRectangle.Top;
if(Top + Height > mdiClient.ClientRectangle.Height)
Top = mdiClient.ClientRectangle.Height - Height;
if(Left + Width > mdiClient.ClientRectangle.Width)
Left = mdiClient.ClientRectangle.Width - Width;
base.OnMove(e);
}