Выявление событий базового контроля - PullRequest
39 голосов
/ 22 июля 2010

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

Ответы [ 4 ]

79 голосов
/ 22 июля 2010

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

    public event EventHandler SelectedIndexChanged 
    {
        add { inner.SelectedIndexChanged += value; }
        remove { inner.SelectedIndexChanged -= value; }
    }
3 голосов
/ 22 июля 2010

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

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

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

2 голосов
/ 22 июля 2010

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

//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);
0 голосов
/ 30 апреля 2014

Есть еще один способ справиться с этим через дизайнер:

В конструкторе, в вашем пользовательском элементе управления, в свойстве выпадающего списка в разделе «Дизайн» установите для «Модификаторы» значение Internal.

Тогда, где вам нужно что-то сделать, добавьте:

CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged;

вместе с:

private void YourCombo_SelectedIndexChanged(object sender, EventArgs e)
{ 
    // Code to execute when the SelectedIndexIsChanged goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...