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

本文关键字:MDIPparent 范围内 窗口 何限制 MDI C#WinForms | 更新日期: 2023-09-27 18:00:27

我有一个C#WinForms MDI应用程序,它有几个MDI子窗口。用户可以移动或调整各个窗口的大小。问题是,当他们将窗口移动到MDI父窗口的边界时,MDIPparent窗口上会出现滚动条,用户可以将子窗口拖动到MDI父对象的边界之外。有没有什么方法可以改变这种行为,使子窗口始终在父窗口内,并且永远不会创建滚动条?我知道有一些方法可以通过覆盖OnMove事件将子窗口"弹出"回父窗口。即使用户正在移动窗口,我也希望窗口保持在内部。有办法做到这一点吗?

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

在您的子窗体上,处理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;
}

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

我可能会重做它,这样它就可以将te表单移回边界,而不是调整其大小。