Программное добавление событий для элементов управления в C#
Часто бывают случаи, когда создать событие для элементов управления необходимо программно, например когда нам надо выполнить определённые манипуляции с элементами и данными которые они содержат до того как начнут обрабатываться события на изменение выбранного значения, на клик мышкой, на изменение содержимого и многие другие.
Для этого целесообразно создавать события не в дизайнере формы а программно. Как это сделать я здесь и покажу на примере.
Пример будет получать источник данных в ComboBox, и по событию SelectedIndexChanged — будет выводить индекс выбранного элемента, вот это событие мы и создадим программно.
Итак приступаем:
DataSet ds = new DataSet(); //Создаем источник данных.
EventHandler handler; //Создаем делегат.
Теперь при загрузке формы заполняем ComboBox данными:
private void Form1_Load(object sender, EventArgs e)
{
ds.ReadXml("dataset.xml");
comboBox1.DataSource = ds.Tables["Table"].DefaultView;
comboBox1.ValueMember = "ID_DOCHEAD";
comboBox1.DisplayMember = "NAME";
}
Заполнение происходит из XML файла.
Пишем процедуру которая должна будет выполняться по событию:
private void do_on_event(object sender, EventArgs e)
{
label1.Text = comboBox1.SelectedValue.ToString();
}
Теперь добавляем на форму, две кнопки, одна из которых создавать событие, другая удалять:
//Создаем событие по кнопке.
private void button2_Click(object sender, EventArgs e)
{
handler = new EventHandler(this.do_on_event);
comboBox1.SelectedIndexChanged += handler;
}
//Удаляем событие по кнопке.
private void button3_Click(object sender, EventArgs e)
{
comboBox1.SelectedIndexChanged -= handler;
}
Теперь, запустив приложение мы увидим что при выборе строки в ComboBox ничего не происходит, однако если мы нажмем на кнопку «Создать событие» то при выборе начнет отображаться индекс позиции. Чтобы отменить событие нам необходимо нажать кнопку «Удалить событие», и при выборе позиции в ComboBox опять ничего не будет происходить.
P.S. Следует отметить, что события можно создавать многократно, это означает что нажав пять раз кнопку «Создать событие» мы создадим 5 событий, чтобы их удалить придется пять раз нажать кнопку «Удалить событие».