Подтвердить что ты не робот

Выявление событий основного контроля

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

4b9b3361

Ответ 1

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

    public event EventHandler SelectedIndexChanged 
    {
        add { inner.SelectedIndexChanged += value; }
        remove { inner.SelectedIndexChanged -= value; }
    }

Ответ 2

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

        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

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

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

Ответ 4

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

В дизайнере, в вашем пользовательском элементе управления, в свойстве combobox в разделе "Дизайн" установите "Модификаторы" на внутренний.

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

CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged;

вместе с:

private void YourCombo_SelectedIndexChanged(object sender, EventArgs e)
{ 
    // Code to execute when the SelectedIndexIsChanged goes here
}