代码之家  ›  专栏  ›  技术社区  ›  Grammarian

如何查找MDI父窗体的内容区域?

  •  1
  • Grammarian  · 技术社区  · 15 年前

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Josh    15 年前

    控件被调用 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();
    
        2
  •  0
  •   Grammarian    15 年前

    像往常一样,在发帖后,我就想出来了。

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

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

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