带有自定义参数的EventHandler

Sas*_*sha 11 c# contextmenu click event-handling

我一直在寻找谷歌上大约一个小时的答案,但我没有找到我正在寻找的确切内容.

基本上,我有一个静态助手类,可以帮助我在我的应用程序中执行我经常做的很多事情.在这种情况下,我有一个名为"CreateDataContextMenu"的方法,它在给定的TreeView控件上创建一个上下文菜单.

public static void CreateDataContextMenu(Form parent, TreeView owner, string dataType)
{ ... }
Run Code Online (Sandbox Code Playgroud)

TreeView所有者是我将关联我的上下文菜单的控件.

然后我将Click事件添加到MenuItem,如下所示:

menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click);
Run Code Online (Sandbox Code Playgroud)

我在这里遇到的问题是我想将"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)
{...}
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用.我这样做可能很天真,但我对事件处理程序还不太满意.

我怎么能这样做?我的第一个猜测是我需要为这个特定情况创建自己的EventHandler.我是否朝着正确的方向前进?

SLa*_*aks 40

您应该创建一个lambda表达式,该表达式使用额外的参数调用方法:

menuItemFolder.Click += (sender, e) => YourMethod(owner, dataType);
Run Code Online (Sandbox Code Playgroud)

  • 这种方法就像一个魅力,它简短而且非常有效.我问的越多,我学的越多:)非常感谢SLaks! (2认同)