C#:如何更改包含MDI子项的区域?

问题描述:

创建MDI父项时,表单的整个“内部”将成为MDI区域。C#:如何更改包含MDI子项的区域?

如果将菜单条添加到MDI父级,则MDI区域会缩小一点以为菜单条腾出空间。

但是,如果您将面板添加到MDI父级的顶部,则整个里面仍然是MDI区域。这意味着您可以将MDI儿童移动到面板后面,并隐藏他们的标题行。如果您将MDI儿童移动到菜单栏后面,则会出现滚动条,您可以向上滚动以访问标题行。但是当您使用面板而不是菜单条时,滚动条不会显示。因为MDI地区不了解面板,我想。

如何缩放MDI区域以低于给定的Y值?

那么它的缺点是你不能修改.Net中的MDI父/容器窗口。窗口仍然在那里,如果你真的想要,你可以用Win32 API来找到它。

但是,您描述的目标是可行的。由于没有任何代码,我不能告诉你做错了什么,但下面演示了这种工作:

public class Form1 : Form 
{ 
    static void Main(string[] args) { Application.Run(new Form1()); } 

    public Form1() 
    { 
     this.IsMdiContainer = true; 
     Panel test = new Panel(); 
     test.Dock = DockStyle.Top; 
     test.Height = 100; 
     this.Controls.Add(test); 

     Form child = new Form(); 
     child.MdiParent = this; 
     child.Text = "Child"; 
     child.Show(); 
    } 
} 
+0

谢谢。我通过添加一个OnLocationChanged事件来解决它,并检查Y值是否低于面板的高度。不过,我不喜欢它。 – 2009-10-08 08:24:28

如果csharptest.net是正确的,一个不能改变的MDI区域,我发现两种方法:

  1. 添加多个MenuStrip对象(其中每个对象都将MDI区域在父窗体上向下移动24个像素)。
  2. 使用MDI儿童的LocationChanged事件,并手动检查其Y值是否大于您希望将它们保留在下面的边框。