从退出的父表单中停止表单

时间:2015-01-02 04:10:21

标签: c# forms

我不是要求为我编写代码,而是要写一条路径。

我正在寻找一种方法来防止表单因离开父表单的边界而打开。

  

比如保持两个表单都打开,但不允许打开另一个表单   通过该程序离开其他程序的范围。最好的例子   就像一个操作系统。

我的意思是:

enter image description here

谢谢,任何进一步的问题请问! 奥斯汀

1 个答案:

答案 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);
}