1

2 つの重複するコントロールがあるとします。

  • コントロールA
  • コントロール B

どのような状況でも、コントロール A をコントロール B よりも優先したいと考えています。

コントロール B の z オーダーは、 を呼び出すか、 を呼び出しBringToFront()て親のインデックスを設定することで、動的に変更できますParent.SetChildIndex(ControlB, 0)。したがって、これが発生するたびに、コントロール A がコントロール B の前に来るようにします。

コントロール A を前面に表示できるように、z オーダーが変更されたときに発生するイベントを探していました。そのようなイベントはありますか?またはこれを行う方法はありますか?

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 に答える