假设有两个重叠的控件:
- 对照A
- 控制 B
我想在所有情况下都保持控制 A 优于控制 B。
控件 B 的 z 顺序可以通过调用BringToFront()
或通过调用在 parent 中设置其索引来动态更改Parent.SetChildIndex(ControlB, 0)
。因此,无论何时发生这种情况,我都希望控件 A 出现在控件 B 的前面。
我正在寻找 z 顺序更改时发生的一些事件,以便我可以将 Control A 放在前面。有没有这样的事件?或者有什么方法可以做到这一点?
不喜欢在 Paint Events 上发送垃圾邮件。尤其是当控件离开屏幕时不会发送 WM_PAINT,因此操作可能不会在您的代码期望的时间发生。
一种更可控的方法是在 Controls 位置更改时进行处理。
更改您的控件以从中派生(将基类更改为您使用的任何内容)并设置字段:
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);
}
}