我想知道MDI父级中灰色可滚动区域的边界 - 放置/排列MDI子项的区域。我不希望它包含任何菜单,滚动条或状态区域 - 只是灰色区域。
this.mdiForm.ClientRectangle
给出了Form的整个内部,包括滚动条等,这不是我想要的。
答案 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。