儿童窗户以MDI形式对接

时间:2012-01-07 14:03:14

标签: c# winforms

我有一个MDI表单和一些子窗口。我将子窗口停靠在MDI的不同区域,但当每个窗体上的焦点丢失时,其他停靠的窗体将重新排列并且每个东西都会爆炸。由于问题混乱,我准备了一组图像来显示反应。

Image1,在点击任何表格之前:

enter image description here

Image2,点击W2后:

enter image description here

不同之处在于当最左侧停靠窗口获得焦点时,它会将其大小更改为MDI窗口的右端而不提及W1窗口。

如何解决此问题?感谢。

2 个答案:

答案 0 :(得分:1)

还有另一个解决方法。一个非常快的例子是:

  • 创建一个新窗体(Form1)。将其isMidiContainer属性设置为true。
  • 现在,在其上放置一个面板(Panel1)并将其dock属性设置为right,然后设置您的宽度。
  • 将另一个面板(面板2)放在窗体上,并将其底座设置为右侧。现在这两个面板彼此相邻。

现在创建2个新窗体(Form 2和Form 3)。

现在,在Form1的main中,就在InitializeComponent()下面,添加:

Form2 f2 = new Form2();
f2.TopLevel = false;
f2.Dock = DockStyle.Fill;
panel1.Controls.Add(f2);
f2.Show();

Form3 f3 = new Form3();
f3.TopLevel = false;
f3.Dock = DockStyle.Fill;
panel2.Controls.Add(f3);
f3.Show();

这是一种稍微不同的方法,但它应该可以正常工作。

答案 1 :(得分:0)

您是否尝试在子表单的Resize方法(W2)上修改自己的大小?

    //something like this
    private void W2_Resize(object sender, EventArgs e)
    {
        Size pSize = this.ClientSize;
        // Resize the form
    }

或者也许使用Focus方法。 我不知道它是否会导致性能问题。