儿童窗户以MDIforms对接

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

Image1,点击任何表格之前:

在此处输入图像描述

Image2,点击W2后:

在此处输入图像描述

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

我该如何解决这个问题? 谢谢。

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

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

现在创建2个新的窗体(窗体2和窗体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(); 

这是一个稍微不同的方法,但它应该工作得很好。

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

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

或者meybe使用Focus方法。 我不知道它是否会导致出现问题。