1

假设有两个重叠的控件:

  • 对照A
  • 控制 B

我想在所有情况下都保持控制 A 优于控制 B。

控件 B 的 z 顺序可以通过调用BringToFront()或通过调用在 parent 中设置其索引来动态更改Parent.SetChildIndex(ControlB, 0)。因此,无论何时发生这种情况,我都希望控件 A 出现在控件 B 的前面。

我正在寻找 z 顺序更改时发生的一些事件,以便我可以将 Control A 放在前面。有没有这样的事件?或者有什么方法可以做到这一点?

4

1 回答 1

2

不喜欢在 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);
    }
}
于 2012-08-23T20:41:09.783 回答