C# 将自定义参数传递给事件处理程序

C# 将自定义参数传递给事件处理程序,c#,.net,wpf,.net-4.0,event-handling,C#,.net,Wpf,.net 4.0,Event Handling,可能重复: 我正在尝试处理从菜单项引发的事件。请单击。关键是,我需要某种方法来传递一些自定义参数(具体来说,两个表示行和列的整数) 这个答案似乎符合我的要求,但不起作用,因为sender已在此范围内定义。可悲的是,我还不知道如何解决这个问题-非常感谢您的建议 传递给evant处理程序的参数取决于提升类的设计方式,它们作为派生自EventArgs的类作为第二个参数传递。除非您是引发事件的类的设计者,否则不可能对其进行扩充。在本例中,我们讨论的是一个框架类,因此根本不可能 作为一种解决方法,您可以

可能重复:

我正在尝试处理从
菜单项引发的事件。请单击
。关键是,我需要某种方法来传递一些自定义参数(具体来说,两个表示行和列的整数)


这个答案似乎符合我的要求,但不起作用,因为
sender
已在此范围内定义。可悲的是,我还不知道如何解决这个问题-非常感谢您的建议

传递给evant处理程序的参数取决于提升类的设计方式,它们作为派生自
EventArgs
的类作为第二个参数传递。除非您是引发事件的类的设计者,否则不可能对其进行扩充。在本例中,我们讨论的是一个框架类,因此根本不可能

作为一种解决方法,您可以在类中定义一些状态成员变量,并使用它们将信息传递给处理程序。

如果在加载的方法中创建了“列”和“行”,那么您可以使用Lambda事件处理程序,以便将变量传递给处理程序

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        //Assumming "column" and "row" are in this block somewhere.
        ...
        MenuItem froNewChild = new MenuItem();
        froNewChild.Header = "Insert new box";
        froNewChild.Click += (s, eArgs) =>
        {
            FlowDocument.allColumns[column - 1].AddFlowRectangle(column, row);
            FlowDocument.ReRenderAll(canvas1);
        };
        FlowRectangleOptions.Items.Add(froNewChild);
        ...
    }

sa_ddam213已经回答了您的问题,但只是想澄清一下:lambda表达式中的参数名称没有语义含义,可以是您想要的任何名称。sender和eventArgs的名称仅用于澄清您链接的问题。在这种情况下,重要的是有两个参数,编译器自己推断其余参数

列和行的值将在定义lambda时捕获,并在事件处理程序执行时可用,即使加载的MainWindow_很久以前返回并且原始变量已销毁


有关C#中lambda表达式的更多信息:

哦,总是这样,试着做几个小时,然后在发布问题4分钟后再找出答案。别理这个!但是,如果您对此感兴趣,请感谢:)值
是从哪里来的?是否有一个
DataGrid
的地方?仅供阅读本文的人参考,解决方案如中所述,但我最终发现“发送者”可以命名为其他名称!谢谢,这就行了。我想你是在暗示我的设计行和列中有一个小小的缺陷,但这没关系,只是从错误中吸取教训;)如果代码正常工作,则它没有缺陷:)
    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        //Assumming "column" and "row" are in this block somewhere.
        ...
        MenuItem froNewChild = new MenuItem();
        froNewChild.Header = "Insert new box";
        froNewChild.Click += (s, eArgs) =>
        {
            FlowDocument.allColumns[column - 1].AddFlowRectangle(column, row);
            FlowDocument.ReRenderAll(canvas1);
        };
        FlowRectangleOptions.Items.Add(froNewChild);
        ...
    }