Ситуация: C#, .NET 3.5, WinFormsC# Winforms: передать функцию из одной формы в другую?
Цель: Form1 имеет кнопки, которая может быть включена с помощью конструктора. И.Е. кнопка будет отображаться только в том случае, если я вызываю новый Form1 (true). Мы хотели бы иметь возможность передать метод через некоторый параметр из Form2 в Form1 (не обязательно должен быть в конструкторе Form1), а при нажатии Form1.Button1 должно выполняться Form2.<SomeMethod>
.
Мы знаем, что мы могли бы создать делегат/событие в Form1 и из Form2 сделать что-то вроде:
Form1.SomeDelegate += new ..... (MyMethodInForm2);
..., а затем в Form1_ButtonClick обстреливают событие, которое, в свою очередь, будет делать магию в Form2.
Но мы задавались вопросом, была ли более элегантная/новая/современная версия (Анонимные методы? Лямбда-выражения и т. Д.), Чтобы выполнить это.
Идея заключается в том, что форма «любая» может инициировать класс Form1 и передавать свой собственный метод, который будет выполняться при нажатии кнопки Form1; но вместо обратного вызова вызывающему (form2,3, .. n) Form1 выполняет переданную функцию (которая, возможно, находится внутри вызывающего абонента). Нам действительно не нужны эти функции, чтобы иметь параметры на данный момент.
Примечание: Образцы кода содержат простые имена переменных/объектов и не берутся из реальной жизни, пожалуйста, игнорируйте простоту.
UPDATE Извините за не более конкретным, я думаю, что я буду продолжать использовать модель делегата/событие, но для справки, вот что я думаю, что это лучше описание situtation:
Form1 является общую форму, которая принимает список элементов и отображает их. Мы можем передавать типы сотрудников или типы лиц или любые «Т». Он работает нормально. Мы получили требование от клиента, спрашивая, можно ли добавить дополнительную кнопку к этому маленькому Form1, который, если щелкнуть, откроет другую форму/выполнит какой-либо метод.
Таким образом, если я использую Form1, я мог бы - время выполнения - сказать кнопке, чтобы открыть EmployeeForm, тогда как если я использую Form1, ту же самую кнопку может открыть форму PersonForm. Теперь открытие формы - это не единственное, что у нас было бы для этой кнопки, но это проблема звонящего.
Прямо сейчас, я сделал то, что мы сказали: делегат/событие на этой Форме1 и в форме «вызова» мы делаем Form1.theEvent + = материал, чтобы подписаться на это событие. Я просто хотел узнать, есть ли лучший способ сделать это, так как это мы делаем в .NET 2.0, и мы только начали использовать .NET 3.5.
Я думаю, что я хотел, чтобы сделать его более «API» дружественным, чем просто чтобы пользователь API знал, что он должен подписаться на событие XX ... –