我有一个MDI窗体和一些子窗口。我把孩子的窗户停靠在MDI的不同区域,但是当每个窗体上的焦点都丢失时,其他停靠的窗体将重新排列,每一件事情都会爆炸。由于存在疑问混淆,我准备了一组图像来显示反应。MDI窗体对接子窗口
图像1,之前单击任何形式:
镜像2,点击W2后:
所不同的是,当最左侧停靠的窗口获得焦点,它会将其大小更改为MDI窗口的右端,而不提及W1窗口。
我该如何解决这个问题?谢谢。
我有一个MDI窗体和一些子窗口。我把孩子的窗户停靠在MDI的不同区域,但是当每个窗体上的焦点都丢失时,其他停靠的窗体将重新排列,每一件事情都会爆炸。由于存在疑问混淆,我准备了一组图像来显示反应。MDI窗体对接子窗口
图像1,之前单击任何形式:
镜像2,点击W2后:
所不同的是,当最左侧停靠的窗口获得焦点,它会将其大小更改为MDI窗口的右端,而不提及W1窗口。
我该如何解决这个问题?谢谢。
您是否尝试过修改子窗体(W2)的Resize方法的大小?
//something like this
private void W2_Resize(object sender, EventArgs e)
{
Size pSize = this.ClientSize;
// Resize the form
}
或者meybe使用Focus方法。 我不知道它是否会导致perfomence问题,但。
我没有,但我认为它会留在以前的风格。我会试一试。 – MahanGM 2012-01-07 15:49:16
还有另一个解决方案。一个非常快速的例子是:
现在创建2个新的窗体窗体(窗体2和窗体3)。
现在,在Form1的主,只是下面的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();
这是一个有点不同的方法,但它应该工作得很好。
感谢您在这么长时间后的回复。本月早些时候我研究了“Form.TopLevel”,并解决了这个问题。 – MahanGM 2013-01-22 14:39:56
酷豆。现在其他人可以看到他们是否有同样的问题:)。 – 2013-01-22 14:50:24
MDI和对接是反对象,窗口模型强烈支持重叠的孩子。 20年前用户拥有640 x 480分辨率的显示器时产生了很多意义。使用像http://sourceforge.net/projects/dockpanelsuite/ – 2012-01-07 14:49:37
这样的停靠库我知道这不是正确的方法,但我想尝试。我曾与dockpanelsuit合作过,这很棒,但我对自己的东西更加自在。感谢您的回复。 – MahanGM 2012-01-07 15:51:46
更好的是,停止使用MDI。正如汉斯所说,它不是专为对接而设计的,它会一路战斗。如果你想发明你自己的车轮,如果你放弃MDI风格并且只使用普通的对接儿童就会容易得多。 – 2012-01-07 15:53:54