Для обмена данными между формами «Родитель-потомок» с использованием событий необходимо следующее:
- Открытый пользовательский класс аргументов для обмена данными.
- Дочерняя форма для события.
- В родительской форме при создании экземпляра дочернего элемента необходимо регистрировать обработчики событий
Обратите внимание, что кодниже приведен только демонстрационный код, и вам нужно будет добавить нулевые проверки и т. д., чтобы сделать его «надежным».
Пользовательские аргументы событий ниже
public class ValueSelectedEventArgs : EventArgs
{
public object Value { get; set; }
}
Ваша поисковая форма должна иметь следующее событиеобъявляется:
public event EventHandler ValueSelected;
protected virtual void OnValueSelected(ValueSelectedEventArgs e)
{
EventHandler handler = ValueSelected;
if (handler != null)
{
handler(this, e);
}
// if you are using recent version of c# you can simplyfy the code to ValueSelected?.Invoke(this, e);
}
В моем случае я запускаю событие по изменению выбранного списка в списке и закрываю форму.Код для него:
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var i = this.checkedListBox1.SelectedIndex;
ValueSelectedEventArgs args = new ValueSelectedEventArgs();
args.Value = i;
OnValueSelected(args);
this.Close();
}
Наконец, в родительской форме вы должны зарегистрироваться для обработчика событий
private void textBox1_Leave(object sender, EventArgs e)
{
lookup myLookup = new lookup();
myLookup.ValueSelected += MyLookup_ValueSelected;
myLookup.Show();
}
private void MyLookup_ValueSelected(object sender, EventArgs e)
{
textBox2.Text = (e as ValueSelectedEventArgs).Value.ToString();
}