2010-11-29 15 views
2

Configuration: Je joins un gestionnaire d'événements sur quelque chose de contrôle WebBrowser comme ça ...C#: Comment puis-je exécuter une méthode sur une propriété qui a un gestionnaire d'événement attaché (sans débordement de pile)

ChatInputElement.AttachEventHandler("onpropertychange", OnInputChange); 

Cette partie fonctionne parfaitement ... Mais le site que je suis en train de décoder introduit des informations URLEncoded dans la zone d'entrée parfois, ce qui manque une bonne expérience lisible par l'homme.

Donc, j'essayais de tirer parti de l'événement "onpropertychange", pour déclencher une méthode qui URLDecode les données dans la zone de saisie. Malheureusement, cela provoque un débordement de pile en raison de l'événement « onPropertyChange » faire feu quand je décode l'URL ...

Question: Comment puis-je accomplir decodage les données dans la zone d'entrée, sans provoquer le débordement de pile? Est-il possible de détecter le matériel URLEncoded, car la zone de saisie contient des données qui n'ont pas besoin d'être décodées à la fois.

+0

Je sais que ce commentaire sera un peu daté, mais j'ai remarqué une erreur dans ma question que je voulais corriger. J'ai attaché un gestionnaire d'événement sur un 'HtmlElement' pas au contrôle WebBrowser. 'ChatInputElement' était le 'HtmlElement'. Désolé pour toute confusion. :) – BinaryBrother

Répondre

4

Vous pouvez définir un indicateur de niveau classe dans votre gestionnaire, puis quitter le gestionnaire si l'indicateur est défini.

+0

ne pas oublier de réinitialiser le drapeau après la sortie sans faire de modification. Sinon, le décodage ne se déclenchera pas si l'utilisateur modifie le champ une seconde fois. –

+0

Merci pour votre réponse, combinée avec la réponse d'Arjen, j'ai été en mesure d'accomplir ce que je voulais. J'utilise Stack Overflow depuis environ un an, quand je n'ai finalement pas trouvé de réponse à ma question ... J'ai décidé de créer un compte. Content de l'avoir fait. :) Btw, annuler l'enregistrement de l'événement, apporter des modifications, puis enregistrer le gestionnaire d'événements à nouveau être une mauvaise idée? Cela semble fonctionner aussi ... – BinaryBrother

+0

Oui; cela fonctionnera aussi. – SLaks

1

magasin le résultat de la comparaison dans le gestionnaire invocations suivantes:

Une façon d'éviter la boucle est de stocker votre URL décodées dans une variable de champ avant la propriété. Ensuite, définissez la propriété. Lors de la deuxième invocation du gestionnaire d'événements, comparez le champ stocké avec la valeur actuelle de la propriété. Si c'est la même chose, vous savez que vous l'avez déjà encodé, et vous quittez le gestionnaire d'événements sans modifier la propriété.

+0

Merci pour votre réponse Arjen. Cela a vraiment aidé à faire avancer les choses. :) – BinaryBrother