2010-06-09 4 views
2

Je souhaite détacher l'événement personnalisé mais je n'ai pas pu le détacher. Ci-dessous, j'utilise -= pour détacher l'événement. Je suppose qu'après cela, la méthode TextChanged2 ne doit pas être appelée car j'ai désenregistré l'événement. Ma compréhension est-elle fausse?Evénement C# et délégué

public delegate void TextChangedEventHandler1(object sender, TextBoxargs ta); 
public event TextChangedEventHandler1 TextChanged1; 
private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    this.TextChanged1 -= new TextChangedEventHandler1(TextChanged2); 
    TextChanged2(sender, e); 
} 

public void TextChanged2(object sender, EventArgs e) 
{ 
    textBox1.Text = textBox1.Text.ToUpper(); 
} 
+0

Vous appelez l'événement 'TextChanged2' manuellement, c'est ce que vous avez l'intention de faire? – ChrisF

+0

s'il vous plaît montrer le code de classe entière, parce que cette paix de code a un sens 4 moi ... – serhio

+0

faire marquer la réponse comme acceptée si vous avez l'information que vous voulez –

Répondre

6

Ce que vous faites est juste. Mais en utilisant la ligne suivante du code, vous pouvez détacher le gestionnaire d'événements.

this.TextChanged1 -= new TextChangedEventHandler1(TextChanged2); 

Mais sur la deuxième ligne que vous avez appelé la fonction directement pour qu'il appelle la fonction textchange2:

TextChanged2(sender, e); 
+0

si je supprime l'appel TextChanged2 (expéditeur, e); la méthode n'est pas appelée même une seule fois. – user359562

+1

@ user359562: man, si vous appelez une méthode, elle est exécutée, quel est le problème? – serhio

+0

avez-vous inscrire gestionnaire d'événements en utilisant cette ligne: this.TextChanged1 + = new TextChangedEventHandler1 (TextChanged2); car il faut s'enregistrer pour appeler la fonction de gestion d'événement –

1

Je veux détacher l'événement personnalisé mais ne pouvait se détacher.

Vous le faites. Tu détaches très bien ton événement.

méthode TextChanged2 ne doit pas être invoqué comme je l'ai désouscrit l'événement .

Il ne doit pas être invoqué lorsque this.textChanged1, mais vous invoquez vous-même en appelant TextChanged2(sender, e);

1

Utilisez

this.TextChanged1 -= TextChanged2; 
+0

Ce n'est pas différent de ce qu'il a déjà. Le nouveau TextChangedEventHandler1 (...) 'est maintenant du sucre syntaxique. – ChrisF

1

Je vous suggère de donner des noms plus raisonnables à vos méthodes, contrôles et événements. Je pourrais imaginer la moitié de la confusion ici provient de noms confus. Par exemple, dans un commentaire à une réponse, vous mentionnez que si vous n'appelez pas explicitement le gestionnaire d'événements TextChanged2 (pour l'événement TextChanged1 ...), il ne sera jamais appelé. Cela conduirait à la question lorsque, et , vous élevez l'événement TextChanged1. Si vous avez en effet souscrit le gestionnaire TextChanged2 à l'événement TextChanged1 avec l'opérateur +=, le gestionnaire sera appelé dès que l'événement est déclenché.