/// <summary> /// 广播事件 /// </summary> /// <param name="event">事件类型</param> /// <param name="context">发布广播的监听器</param> /// <param name="eventControl">触发事件的控件</param> public static void Broadcast(FocusEvent @event, FocusListener context, Control eventControl) { foreach (FocusListener listener in Instance.FocusListeners) { if (listener != null && listener != context) { listener.OnBroadcast(@event, context, eventControl); } } }
public void OnBroadcast(FocusEvent @event, FocusListener context, Control eventControl) { // 判断是不是其他监听器的消息(广播转发的时候其实已经过滤了,这句判断可以不加) if (context != this) { switch (@event) { case FocusEvent.Got: // 如果是其他监听器下的控件获得了焦点,且焦点最后的状态记录为true,则主动执行失去焦点的事件函数 if (isOnFocus && !ChildControls.Contains(eventControl)) { ChildControl_LostFocus(lastOnFocusControl, new EventArgs()); } break; case FocusEvent.Lost: break; } } }
public static void RemoveListener(FocusListener listener) { Instance.FocusListeners.Remove(listener); }
/// <summary> /// 添加监听器 /// </summary> /// <param name="listener"></param> public static void AddListener(FocusListener listener) { Instance.FocusListeners.Add(listener); }