在SizeChanged事件中更改大小不会生效

时间:2012-02-23 22:11:19

标签: c# winforms events layout

技术:C#,Winforms

背景: 我有以下容器结构(包含面板的表单,其中包含2个面板)

Form F1
 |-> Panel P1 (DockStyle.Fill)
        |-> Panel P2 (DockStyle.Top)
        |-> Panel P3 (DockStyle.Fill)

我注册了P3.SizeChange事件,并且在我更改P2.Size

的情况下

问题: 我希望所有尺寸的变化都能在GUI上正确反映

观察到的结果: 每次P2.Size根据先前设置的尺寸

进行更改

我尝试了什么:

  1. 我尝试过调用PerformLayout和Invalidate,但GUI仍无法正确反映更改。
  2. 如果我将相同的功能连接到F1.SizeChange,一切正常
  3. 如果我改变并恢复DockStyle(P3.Dock = DockStyle.None; P3.Dock = DockStyle.Fill),它会改变大小,而不是改变大小,它会弄乱GUI
  4. 似乎在Forms库中我无法从兄弟控件的布局相关事件(SizeChanged)更改布局相关属性(Size,Dock等)

    有没有其他人遇到此问题并有解决方法? 我正在使用Visual Studio Express 2010中的.NET 4.0(我认为)

    将非常感谢输入

2 个答案:

答案 0 :(得分:0)

尝试在BeginInvoke()中更改下一个消息循环迭代中的大小(布局传递结束后会发生这种情况)。

答案 1 :(得分:0)

我不知道你想要达到的目的;但是,如果您尝试在P2和P3之间分配可用空间,则SplitContainer可以帮助解决问题。