C#WinForms:如何限制MDI子窗口始终在MDIParent的范围内?

时间:2011-06-23 17:37:10

标签: c# winforms

我有一个C#WinForms MDI应用程序,它有几个MDI子窗口。用户可以移动或调整各个窗口的大小。问题是,当他们将窗口移动到MDI父级的边界时,滚动条显示在MDIParent窗口上,用户可以将子窗口拖到MDI父级的边界之外。有没有办法改变这种行为,以便子窗口始终在父窗口内,并且没有创建滚动条?我知道有一些方法可以通过覆盖OnMove事件将子窗口“弹出”回父窗口。即使用户正在移动窗口,我也希望窗户能够留在里面。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

在您的子表单上,处理FormResize事件,如下所示:

private void Form1_Resize(object sender, EventArgs e)
{
    Size pSize = this.ParentForm.ClientSize;

    Size maxAllowed = new Size(pSize.Width - this.Left, pSize.Height - this.Top);

    // Resize the child if it goes out of bounds
    if (this.Height > maxAllowed.Height)
        this.Height = maxAllowed.Height;

    if (this.Width > maxAllowed.Width)
        this.Width = maxAllowed.Width;
}

可能不是很好的结果,取决于你想要的。

我可能会重做它,以便它将形式移回界限而不是调整它。