2009-08-29 109 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

相關問題