让我们说有两个重叠的控件:
我想在任何情况下都将Control A保持在Control B之上。
控制B的z顺序可以通过调用BringToFront()
或通过调用Parent.SetChildIndex(ControlB, 0)
在父级中设置其索引来动态更改。所以无论何时发生这种情况,我都希望Control A能够出现在ControlB之前。
我正在寻找更改z顺序时发生的一些事件,以便我可以将Control A带到前面。有没有这样的事件?或者有办法做到这一点?
答案 0 :(得分: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);
}
}