2009-08-29 6 views
0

J'ai ajouté un événement à un contrôle utilisateur, et j'appelle l'événement dans la fenêtre du contrôle utilisateurComment le compilateur génère-t-il le code du gestionnaire d'événements?

Ma question est: quel code le compilateur génère-t-il lorsque nous affectons un gestionnaire d'événements via l'EDI? Donc, je peux aussi utiliser quelque chose de similaire pour écrire automatiquement le gestionnaire d'événements lors de l'exécution.

Je sais que nous pouvons écrire un gestionnaire d'événements, par exemple mon gestionnaire d'événements que je vous écris ici:

SearchControl.SearchChangedEvent += new RoutedEventHandler(SearchControl_SearchChanged); 

L'erreur jeté dans ce cas est qu'il n'y a pas mise en correspondance de surcharge, donc j'essaie de faire la même chose que le compilateur fait par le code. Comment le compilateur connaît-il automatiquement les arguments?

EDIT: Solution.

Je trouve la zone de préoccupation où j'étais confus dans cet article: http://msdn.microsoft.com/hi-in/magazine/cc785480%28en-us%29.aspx

Dans « des événements routés aperçu » section, l'auteur écrit:

Pour voir cela, allez à la constructeur pour votre classe, faites un clic droit sur l'appel de méthode InitializeComponent, et sélectionnez Aller à la définition du menu contextuel .L'éditeur affichera un fichier de code généré (avec un dénomination convention de .i.g.cs ou .i.g.vb) contenant le code normalement généré au moment de la compilation.

J'ai trouvé le code derrière généré !!

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

Merci, pour ceux qui étaient un peu confus avec l'énoncé du problème. J'espère que cela le rend clair maintenant (c'était comme si je ne pouvais pas expliquer le problème jusqu'à ce que j'ai trouvé la solution :)

Répondre

0

Vous avez entièrement décrit votre SearchControl_SearchChanged la fonction que vous lui avez transmise en tant que paramètre au délégué RoutedEventHandler. À partir de MSDN, le délégué prend 2 paramètres, un object et un RoutedEventArgs et renvoie void. C'est ce que l'IDE utilise pour construire automatiquement l'en-tête de fonction SearchControl_SearchChanged.

+0

Merci Blindy ,,, je reçois maintenant ce que le compilateur fait ...... Y at-il un moyen de voir le fichier de classe (le cas échéant) qui est généré par la compilation? Pensez que j'ai vu quelque chose comme ça, je ne me souviens pas si ... – 81967

+0

Si vous voulez dire ildasm.exe, il se trouve dans votre dossier 'C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A \ bin', vous l'exécutez , sélectionnez votre binaire compilé et il va le démonter pour vous. Je suis désolé si ce n'est pas ce que vous demandez, vos questions sont un peu floues. – Blindy

+0

Merci Blindy pour votre aide ...... Je vous dirais sûrement la réponse une fois que je l'ai rencontré .. – 81967

Questions connexes