Я пытаюсь надежно определить, когда фокус покидает группу элементов управления.Поэтому, если я вкладываю или нажимаю между двумя элементами управления в группе, это считается не выходом, но как только я нажимаю на элемент управления вне группы, он вызывает событие.Вот как я сейчас это делаю:
public class LeaveTracker
{
private HashSet<Control> trackedControls = new HashSet<Control>();
public void Track(Control ctrl)
{
ctrl.Leave += Ctrl_Leave;
trackedControls.Add(ctrl);
}
private void Ctrl_Leave(object sender, EventArgs e)
{
foreach (var ctrl in trackedControls)
if (ctrl.ContainsFocus)
return;
if (LeftControlGroup != null)
LeftControlGroup(this, EventArgs.Empty);
}
public event EventHandler LeftControlGroup;
}
Иногда это работает отлично, но иногда кажется, что перестает вызывать события.Есть ли более надежный способ сделать это?