如何找到MDI父表单的内容区域?

时间:2010-03-10 04:11:42

标签: .net mdi

我想知道MDI父级中灰色可滚动区域的边界 - 放置/排列MDI子项的区域。我不希望它包含任何菜单,滚动条或状态区域 - 只是灰色区域。

this.mdiForm.ClientRectangle给出了Form的整个内部,包括滚动条等,这不是我想要的。

2 个答案:

答案 0 :(得分:1)

控件名为MdiClient,当IsMdiContainer属性设置为true时,它会自动添加。您应该可以通过执行以下操作来访问它:

// traditional way
MdiClient client = null;
foreach (Control c in this.mdiForm.Controls) {
    client = c as MdiClient;
    if (client != null) {
        break;
    }
}

// linq
MdiClient client = this.mdiForm.Controls
                       .OfType<MdiClient>()
                       .FirstOrDefault();

答案 1 :(得分:0)

与往常一样,在发布之后,我想出来了。

Form有一个内部属性MdiClient。所以,你可以得到这样的矩形:

PropertyInfo pi = typeof(Form).GetProperty("MdiClient", 
    BindingFlags.Instance | BindingFlags.NonPublic);
MdiClient mdiClient = (MdiClient)pi.GetValue(this.form1, null);
Rectangle scrollableRect = mdiClient.ClientRectangle;

当然,生产版本会在适当的位置检查null。