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;
            }
        }