EventHandler с пользовательскими аргументами
Я искал ответ в течение часа в Google, но я не нашел именно то, что я ищу.
В принципе, у меня есть статический вспомогательный класс, который помогает выполнять многие вещи, которые я часто делаю в своем приложении. В этом случае у меня есть метод с именем "CreateDataContextMenu", который создает контекстное меню для данного элемента управления TreeView.
public static void CreateDataContextMenu(Form parent, TreeView owner, string dataType)
{ ... }
TreeView owner-это элемент управления, с которым я буду связывать свое контекстное меню.
Затем позже я добавляю событие Click в MenuItem вот так:
menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click);
Проблема заключается в том, что я хочу передать "owner" и "dataType" в качестве аргументов событию menuItemFolder_Click.
Я попробовал следующее:
menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click(sender,e,owner,dataType));
(...)
private static void menuItemFolder_Click(object sender, System.EventArgs e, Treeview owner, string dataType)
{...}
Но это совсем не работает. Это может быть очень наивно с моей стороны, но я еще не очень комфортно чувствую себя с обработчиком событий.
Любая идея, как я могу это сделать? Моя первая догадка заключается в том, что мне нужно создать свой собственный EventHandler для этого конкретного случая. Иду ли я в правильном направлении с это?
3 ответа:
Необходимо создать лямбда-выражение, вызывающее метод с дополнительными параметрами:
menuItemFolder.Click += (sender, e) => YourMethod(owner, dataType);
Честное признание: Я не пробовал код ниже.
Я думаю, причина
menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click(sender,e,owner,dataType));
Не будет работать, потому что вы на самом деле переходите к системе.EventHandler () результат вызова функции menuItemFolder_Click () с указанными параметрами. Вы не передаете указатель на саму функцию.
Попробуйте написать другую функцию, которая реализует подробности menuItemFolder_Click (). Смотрите, если что-то вроде
private void menuItemFolder_Click_Helper (object sender, EventArgs e, object Owner, object DataType) { // implement details here }
И затем вызовите функцию из меню menuItemFolder_Click ().