2009-08-29 107 views
0

我增加了一个事件到用户控件,我调用用户控件的消费窗口时,编译器如何生成事件处理程序代码?

我的问题是:当我们通过IDE分配事件处理程序编译器生成什么样的代码?

因此,我也可以使用类似的东西来自动在运行时编写事件处理程序。

我知道我们可以写一个事件处理程序,如在这里我写我的事件处理程序:

SearchControl.SearchChangedEvent += new RoutedEventHandler(SearchControl_SearchChanged); 

在这种情况下,抛出的错误是,没有超载匹配,所以我尝试做同样的事情编译器通过代码完成。编译器如何自动知道参数?

编辑:解决方案。

我发现我在那里这篇文章中混淆关注的领域:http://msdn.microsoft.com/hi-in/magazine/cc785480%28en-us%29.aspx

“路由事件概述”节中,作者写道:

看到这一点,去了构造函数 类,在 InitializeComponent方法调用右键单击,然后选择 转到从 背景menu.The编辑器将显示一个 生成的代码文件定义(用命名为 约定.i.g.cs或.i.g.vb) 包含通常在编译时生成的代码 。

我发现后面的代码生成了!

#line 6 "..\..\Window1.xaml" 
this.myButton.Click += 
    new System.Windows.RoutedEventHandler(
    this.myButton_Click); 

谢谢,对于那些与问题陈述有点混淆的人。我希望现在能够说清楚(这是我直到找到解决方案时才解释问题的原因:)

回答

0

您完全描述了SearchControl_SearchChanged函数,它将第二个函数作为参数传递给代理RoutedEventHandler。代表从MSDN开始,代表需要2个参数,objectRoutedEventArgs,并返回void。这正是IDE用于自动为您构建SearchControl_SearchChanged函数标头的内容。

+0

感谢盲目,,,我现在得到什么编译器...... 有没有办法看到编译生成的类文件(如果有的话)?想想看过类似的东西,虽然记不起来...... – 81967 2009-08-29 12:06:22

+0

如果你的意思是ildasm.exe,它在你的'C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin'文件夹中,你运行它,选择你编译的二进制文件,它会为你反汇编。对不起,如果这不是你要求的,你的问题有点不清楚。 – Blindy 2009-08-29 12:14:11

+0

感谢Blindy的帮助......我一定会在遇到它时告诉你答案。 – 81967 2009-08-29 12:35:20

相关问题