2012-08-23 64 views
0

比方說,有兩個重疊的控件:保持一個控制另一臺總是在Windows窗體.NET

  • 控制一個
  • 對比B

我想保持控制一個在對照組B在所有情況下。

控制B的z順序可以通過調用BringToFront()或通過調用Parent.SetChildIndex(ControlB, 0)在父項中設置其索引來動態更改。所以每當發生這種情況時,我想讓Control A來到ControlB前面。

我正在尋找z順序發生變化時發生的一些事件,以便我可以將控件A放在前面。有沒有這樣的事件?或者有一些方法可以做到這一點?

+0

如何http://stackoverflow.com/questions/4007663/intercepting-the-value -change-of-setchildindex – stuartd

+0

當其子控件的z順序改變時,是否發生父窗體的繪畫事件?它是否出現在z順序改變的控件上? – Brij

+0

控件(以及受更改影響的其他控件)可能需要重新繪製,所以是.. – stuartd

回答

2

不喜歡在Paint Events上發送垃圾郵件。特別是因爲WM_PAINT不會在控件關閉時發送,所以在您的代碼期望它們時,操作可能不會發生。

控制位置發生變化時,可以採取更爲可控的方式來完成此操作。

更改控制從這個(改變基類,無論你使用)派生並設置字段:

firstControl.ChildControl = secondControl; 

public class AlwaysParentingControl : TextBox 
{ 
    private const Int32 WM_WINDOWPOSCHANGED = 0x47; 
    public Control ChildControl { get; set; } 

    protected override void WndProc(ref Message m) 
    { 
     if(m.Msg == WM_WINDOWPOSCHANGED && ChildControl != null) 
      ChildControl.BringToFront(); 

     base.WndProc(ref m); 
    } 
} 
+0

謝謝。這是正確的解決方案。 – Brij

相關問題