C # Получить события элемента управления внутри пользовательского элемента управления - PullRequest
3 голосов
/ 17 июня 2010

У меня есть список внутри пользовательского элемента управления.Я использую этот пользовательский элемент управления в форме.Я хотел бы иметь возможность получить событие изменения индекса списка, когда я работаю с формой.Как я могу это сделать?

Ответы [ 4 ]

4 голосов
/ 17 июня 2010

Если вы используете WinForms, вам нужно связать это событие вручную. Создайте событие с такой же подписью в вашем пользовательском элементе управления, создайте обработчик для четного исходного списка в вашем пользовательском элементе управления и в этом обработчике запустите только что созданное событие. (игнорируйте все это, если вы используете WPF)

3 голосов
/ 17 июня 2010

Это может быть недостатком UserControl. Вы должны повторно опубликовать события и свойства одного или нескольких встроенных элементов управления. Рассмотрим альтернативу: если этот UserControl содержит только ListBox, то вам гораздо лучше просто наследовать от ListBox вместо UserControl.

В любом случае вам нужно повторно запустить событие SelectedIndexChanged. И, конечно же, вам нужно будет позволить клиентскому коду читать выбранный в данный момент элемент. Таким образом:

public partial class UserControl1 : UserControl {
    public event EventHandler SelectedIndexChanged;

    public UserControl1() {
        InitializeComponent();
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
        EventHandler handler = SelectedIndexChanged;
        if (handler != null) handler(this, e);
    }
    public object SelectedItem {
        get { return listBox1.SelectedItem; }
    }
}
3 голосов
/ 17 июня 2010

Вы можете добавить прокси-событие в пользовательский элемент управления

public event EventHandler<WhatEverEventArgs> IndexChanged { 
    add { listBox.IndexChanged += value; }
    remove { listBox.IndexChanged -= value; } 
}
0 голосов
/ 17 июня 2010

Посмотрите на расширение Ninjects MessageBroker, и по измененному индексу вызовите опубликованное событие и подпишитесь на событие на стороне формы.

Messagebroker довольно полезен в большинстве случаев.

Еще одна мысль - реализовать шаблон наблюдателя и добавить форму в качестве наблюдателя к событию управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...