public SplitButtonExDecorator(SplitButtonEx button, ITheme theme) { _button = button; _theme = theme; _imageAlign = button.ImageAlign; _image = button.Image; _clickHandler = (EventHandler)GetClickEvent(_button); button.Controls.Add(this); }
private static void RemoveClickEvent(SplitButtonEx button) { try { var eventInstance = typeof(Control) .GetField(EventClick, BindingFlags.Static | BindingFlags.NonPublic).GetValue(button); var list = (EventHandlerList)typeof(SplitButtonEx) .GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(button, null); list.RemoveHandler(eventInstance, list[eventInstance]); } catch (NullReferenceException) { } }
private void Apply(SplitButtonEx button) { if (_theme.Button.FlatStyle == FlatStyle.System) { return; } if (_enabled) { button.ImageAlign = ContentAlignment.MiddleRight; button.Image = GetButtonDownArrow(); button.MouseClick += HandleButtonMouseClick; RemoveClickEvent(_button); } else { button.ImageAlign = _imageAlign; button.Image = _image; button.MouseClick -= HandleButtonMouseClick; button.Click += _clickHandler; } }