Winforms MDI客户端区域的大小/位置

Winforms MDI客户端区域的大小/位置,winforms,mdi,mdichild,mdiparent,Winforms,Mdi,Mdichild,Mdiparent,MDI表单内部是承载MDI子表单的客户端区域。我怎么知道那个区域有多大?到目前为止,我所能想到的最好方法是找到父级潜在客户区(mdipradent.ClientRectangle)的总大小,然后减去从客户区移除的组件(如工具栏等)的大小。有更好的方法吗?表单上没有允许您访问MDI客户端窗口的属性。但你可以像这样找到它: public MdiClient GetMdiClientWindow() { foreach (Control ctl in this.Controls) { if

MDI表单内部是承载MDI子表单的客户端区域。我怎么知道那个区域有多大?到目前为止,我所能想到的最好方法是找到父级潜在客户区(mdipradent.ClientRectangle)的总大小,然后减去从客户区移除的组件(如工具栏等)的大小。有更好的方法吗?

表单上没有允许您访问MDI客户端窗口的属性。但你可以像这样找到它:

public MdiClient GetMdiClientWindow() {
  foreach (Control ctl in this.Controls) {
    if (ctl is MdiClient) return ctl as MdiClient;
  }
  return null;
}

从这里开始,只需使用它的Size属性。

下面是vb.net中该代码的一个变体:

Public Function GetMdiClientWindowSize() As Size
    For Each ctl As Control In Me.MdiParent.Controls
        If TypeOf ctl Is MdiClient Then
            Return ctl.Size
        End If
    Next
    Return Nothing
End Function

谢谢,真是太棒了。出于某种原因,我不得不再减去4个像素(可能是帧边框?),但我可以接受。@Jeff使用MdiClient.ClientSize而不是使用LINQ减去4个像素:
this.Controls.OfType().FirstOrDefault()