private void LoadHandlers()
        {
            comboBoxHandler.BeginUpdate();

            var handlers = new List <string>();

            foreach (var handler in _handlerTypes)
            {
                var existingHandle = CurrentAgentConfig?.GetHandler(CurrentEventName, handler.Name);
                if (existingHandle != null &&
                    _initialEntry?.Handler?.GetType().FullName != existingHandle.GetType().FullName)
                {
                    continue;
                }

                handlers.Add(handler.Name);
            }


            var handlerObjects = handlers.OrderBy(x => x).Cast <object>().ToArray();

            comboBoxHandler.Items.Clear();
            comboBoxHandler.Items.AddRange(handlerObjects);
            comboBoxHandler.EndUpdate();

            if (comboBoxHandler.Items.Count > 0)
            {
                comboBoxHandler.SelectedIndex = 0;
            }
            else
            {
                RefreshCanConfigure();
            }
        }
        private void SaveAndHide()
        {
            if (_initialEntry == null && _agentConfigs.All(x => x.GetType().Name != CurrentAgentConfigName))
            {
                // add a new agent config to the agent config list if
                // no config agent yet or
                // config agent has changed and the new target agent config type does not exist yet

                var agentType = AppDomain.CurrentDomain
                                .GetAssemblies()
                                .GetAgentConfigTypes()
                                .Single(x => x.Name == CurrentAgentConfigName);
                _agentConfigs.Add((IAgentConfig)Activator.CreateInstance(agentType));
            }

            Debug.Assert(CurrentAgentConfig != null, "CurrentAgent != null");

            var existingEventProperty = _initialEntry?.AgentConfig.GetType().GetProperty(_initialEntry.EventName);
            var existingHandler       =
                _initialEntry?.AgentConfig.GetHandler(_initialEntry.EventName, _initialEntry.Handler?.GetType().Name);
            var newEventProperty = CurrentAgentConfig.GetType().GetProperty(CurrentEventName);
            var newHandlerType   = AppDomain.CurrentDomain.GetAssemblies().GetHandlerTypes()
                                   .Single(x => x.Name == CurrentHandlerName);

            Debug.Assert(newEventProperty != null, "eventProperty != null");

            if (_initialEntry != null && _initialEntry.AgentConfig != CurrentAgentConfig)
            {
                // when agent config changed
                _mainForm.RemoveEntry(existingEventProperty, _initialEntry.Handler?.GetType());
                _mainForm.AddEntry(newEventProperty, _currentHandler);
            }
            else if (_initialEntry != null && _initialEntry.EventName == CurrentEventName &&
                     _initialEntry.Handler?.GetType().Name == CurrentHandlerName)
            {
                // equal - do nothing
            }
            else
            {
                if (_initialEntry != null && _initialEntry.Handler?.GetType() != newHandlerType &&
                    _initialEntry.AgentConfig.GetType() == CurrentAgentConfig.GetType())
                {
                    // replace existing handler with new one
                    _mainForm.ReplaceEntry(CurrentAgentConfig.GetType().GetProperty(_initialEntry.EventName),
                                           existingHandler, _currentHandler);
                }
                else
                {
                    // add new entry
                    _mainForm.AddEntry(newEventProperty, _currentHandler);
                }
            }


            Hide();
        }