Представление событий базового управления

У меня есть поле комбинированного списка в пользовательском элементе управления. Как я могу выставить определенные события от него, такие как SelectedIndexChanged или KeyPress, и т.д. кому-либо/вещи реализующему мой пользовательский элемент управления?

39
задан Malfist 22 July 2010 в 15:40
поделиться

3 ответа

Вы можете переслать события следующим образом:

    public event EventHandler SelectedIndexChanged 
    {
        add { inner.SelectedIndexChanged += value; }
        remove { inner.SelectedIndexChanged -= value; }
    }
80
ответ дан 27 November 2019 в 02:24
поделиться

Вам нужно будет самостоятельно закодировать их в элементе управления - пользовательский элемент управления не продвигает автоматически события своих дочерних элементов управления. Затем вы можете связать свой фактический элемент управления с продвигаемым событием пользовательского элемента управления:

        public event EventHandler SelectedIndexChanged;

        private void OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (SelectedIndexChanged != null)
                SelectedIndexChanged(sender, e);
        }

        public UserControl1()
        {
            InitializeComponent();

            cb.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);
        }

К сожалению, вам придется делать это для каждого интересующего вас события.

3
ответ дан 27 November 2019 в 02:24
поделиться

Очень простым решением вместо использования настраиваемых событий было бы предоставление вложенного элемента управления как свойства настраиваемого элемента управления. Оттуда вы можете очень легко прикрепить к нему обработчики событий. Не всегда рекомендуется предоставлять дочерние элементы управления, но в зависимости от типа элемента управления и того, как вы его используете, это может сработать.

//create an instance of my control
MyCustomControl controlInstance = new MyCustomControl();

//attach and event handler to the exposed subcontrol
controlInstance.SaveButton.Click += new EventHandler(SaveButton_Click);
2
ответ дан 27 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: