/// <summary> /// Устанавливает обработчик OnClick для control и всех его дочерних элементов. /// Применяю для визуального выделения объекта. /// </summary> /// <param name="control"></param> public static void SetOnDoubleClickHandlerForAllElementsInControl(Control control, EventHandler handler) { var allControls = HelperControls.GetAllChildrenControls(control); foreach (var itemControl in allControls) { itemControl.DoubleClick -= handler; itemControl.DoubleClick += handler; } }
//Todo Можно сделать еще отдельным параметром (на какое событие подписываемся: Click, Load, ect...) /// <summary> /// Устанавливает обработчик OnMouseEnter для control и всех его дочерних элементов. /// </summary> /// <param name="control"></param> public static void SetOnMouseEnterHandlerForAllElementsInControl(Control control, EventHandler handler) { var allControls = HelperControls.GetAllChildrenControls(control); foreach (var itemControl in allControls) { itemControl.MouseEnter -= handler; itemControl.MouseEnter += handler; } }
/// <summary> /// Метод для получения всех контролов внутри элемента /// Проходим рекурсивно и возвращаем все имеющиеся контролы /// Использую метод для последующей привязки обработчика события /// Нужно для выделения элемента при нажатии мышки на любой контрол внутри основного /// </summary> /// <param name="parentControl"></param> /// <returns></returns> public static IEnumerable <Control> GetAllChildrenControls(Control parentControl) { var parentControls = parentControl?.Controls.Cast <Control>(); foreach (Control item in parentControl?.Controls) { if (item.HasChildren) { var itemControls = HelperControls.GetAllChildrenControls(item); if (itemControls == null || itemControls.Count() == 0) { continue; } parentControls = parentControls?.Concat(itemControls); } } return(parentControls); }