2012-02-23 58 views
0

技術: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。填寫),它攪亂了GUI

好像在表單庫我無法從同級控件的佈局相關的事件(SizeChanged將)佈局相關的屬性(大小,碼頭等)改變

有其他人遇到此問題並有解決方法? 我使用.NET 4.0(我認爲)從Visual Studio Express的2010

投入將不勝感激

+0

P3的大小直接受到P2大小的影響,所以並不奇怪。郵政編碼。 – 2012-02-24 01:20:37

+0

但是,如果我也是從F1.SizeChanged來做的話,那也是如此,但是它從那裏起作用。 – IDK 2012-02-24 02:02:36

回答

0

嘗試通過改變在接下來的消息循環迭代的大小(這會發生在佈局傳遞結束後)在BeginInvoke()

+0

我會嘗試這個並回復。但這是最好的解決方案。你知道它爲什麼這樣表現。 – IDK 2012-02-24 00:10:05

+0

確實有效。非常感謝。有誰知道爲什麼它不起作用,雖然 – IDK 2012-02-24 12:34:22

0

我不知道你在努力達到什麼目的;但是,如果您試圖分配P2和P3之間的可用空間,則可以使用SplitContainer來解決問題。

+0

這是一個複雜的GUI佈局,我面臨的問題。出於說明目的,我剛剛提取了根本原因。 – IDK 2012-02-24 00:03:51