2013-01-03 72 views
0

可能重复:
Passing arguments to event handler传递自定义参数的事件处理程序

我试图处理来自MenuItem.Click引发的事件。问题是,我需要一些方法来传递一些自定义参数(具体来说,两个整数代表行和列)。

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    ... 
    MenuItem froNewChild = new MenuItem(); 
    froNewChild.Header = "Insert new box"; 
    froNewChild.Click += new RoutedEventHandler(froNewChild_Click); 
    // froNewChild.Click += new RoutedEventHandler(froNewChild_Click, column, row); 
    FlowRectangleOptions.Items.Add(froNewChild); 
    ... 
} 

private void froNewChild_Click(object sender, RoutedEventArgs e) //+column & row 
{ 
    FlowDocument.allColumns[column-1].AddFlowRectangle(column, row); 
    FlowDocument.ReRenderAll(canvas1); 
} 

这个答案Passing arguments to an event handler似乎做我想做的,但不上班,是因为sender在此范围内已定义。可悲的是我还不知道如何解决这个问题 - 建议非常感谢!

+0

哦,永远的方式,尝试的东西小时,然后张贴的问题后计算出来4分钟。忽略这个!但是,如果你正在阅读本文,感谢您对此感兴趣:) –

+0

是做'column'和'row'的值吗?有没有'DataGrid'的地方? –

+0

只是为了任何阅读未来的参考,如http://stackoverflow.com/questions/12293471/passing-arguments-to-event-handler描述,但我最终突然意识到“发件人”可以被命名为东西溶液呈其他! –

回答

3

Assumming“列”和“行”在你的加载方法创建的,你可以只使用一个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); 
     ... 
    } 
+0

谢谢,这是工作。当我想你暗示了有在我的设计再行和列略有瑕疵,不过没关系,只是此刻的错误中学习;) –

+0

如果代码工作它不是有缺陷的:) –

0

传递给事件处理常式的参数依赖于饲养类是如何设计的,它们是从EventArgs衍生的第二个参数类过去了。除非您是提高活动的班级的设计师,否则不可能增加这一点。在这个特定的情况下,我们正在讨论一个框架类,所以根本不可能。

正如你可以定义在类中的一些状态的成员变量,并利用它们的信息传递到处理程序解决方法。

0

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

行和列的值将在您定义的Lambda和在事件处理程序执行即使MainWindow_Loaded早已回来了,原来的变量破坏将可在点被捕获。

更多关于lambda表达式在C#:http://msdn.microsoft.com/en-us/library/bb397687.aspx

相关问题