2009-08-29 3 views
0

Я добавил событие в пользовательский элемент управления, и я вызываю событие в потребительском окне пользовательского элемента управления,Как компилятор генерирует код обработчика событий?

Мой вопрос: какой код генерирует компилятор, когда мы назначаем обработчик событий через среду IDE?

Чтобы я мог использовать что-то подобное, чтобы автоматически записывать обработчик событий во время выполнения.

Я знаю, что мы можем написать обработчик события, например, мой обработчик событий, который я пишу здесь:

SearchControl.SearchChangedEvent += new RoutedEventHandler(SearchControl_SearchChanged); 

Ошибка выброшены в данном случае является то, что нет согласования перегрузки, так что я пытаюсь сделать то же самое что компилятор делает через код. Как компилятор автоматически знает аргументы?

EDIT: Решение.

Я нашел проблемную область, где я был смущен в этой статье: http://msdn.microsoft.com/hi-in/magazine/cc785480%28en-us%29.aspx

В «Обзор Бегство События» раздел, автор пишет:

Чтобы увидеть это, перейдите к конструктор для вашего класса, щелкните правой кнопкой мыши по вызову метода InitializeComponent , а выберите «Перейти к определению» из контекстного меню . Редактор отобразит файл сгенерированного кода (с присвоение соглашения .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 параметра, object и RoutedEventArgs, и возвращает void. Это то, что IDE использует для автоматического создания заголовка функции SearchControl_SearchChanged.

+0

Thanks Blindy ,,, Теперь я получаю то, что делает компилятор ...... Есть ли способ увидеть файл класса (если есть), который генерируется компиляцией? Думаю, что я видел что-то вроде этого, не могу вспомнить, хотя ... – 81967

+0

Если вы имеете в виду ildasm.exe, он находится в папке 'C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A \ bin', вы запускаете его , выберите свой скомпилированный двоичный файл, и он разобьет его для вас. Прошу прощения, если это не то, о чем вы просите, ваши вопросы немного неясны. – Blindy

+0

Спасибо Блинди за вашу помощь ...... Я бы точно сказал вам ответ, как только я наткнулся на него. – 81967

Смежные вопросы