class WrappedEnterLeave : Control { StringBuilder sb; public WrappedEnterLeave (StringBuilder sb) { this.sb = sb; } protected override void OnEnter (EventArgs e) { IContainerControl c = GetContainerControl (); //sb.Append(String.Format("before Control.OnEnter: {0}, active = {1}", Name, c.ActiveControl)); base.OnEnter (e); sb.Append(String.Format("after Control.OnEnter: {0}, active = {1}", Name, c.ActiveControl)); } protected override void OnLeave (EventArgs e) { IContainerControl c = GetContainerControl (); sb.Append(String.Format("before Control.OnLeave: {0}, active = {1}", Name, c.ActiveControl)); base.OnLeave(e); sb.Append(String.Format("after Control.OnLeave: {0}, active = {1}", Name, c.ActiveControl)); } } [Test] public void ActiveControl4 () { sb = new StringBuilder (); ContainerControl cc = new ContainerControl (); Control c1 = new Control (); WrappedEnterLeave c2 = new WrappedEnterLeave (sb); cc.Controls.Add (c1); cc.Controls.Add (c2); connect (c1); connect (c2); c1.Select (); c2.Select (); Console.WriteLine ("<"); Console.WriteLine (sb.ToString ()); Console.WriteLine (">"); }