la situation est comme ceci j'ai un contrôle et il a rendu l'événement dans la définition du contrôle, à cet événement est attaché gestionnaire je cherche un moyen de montrer une sorte de message si dans une classe qui utilise ce contrôle un autre gestionnaire est attaché à cet événement Cordialement, IordanÉvitez d'attacher à nouveau l'événement
Répondre
Cela ne me semble pas être une bonne approche. Lors de l'utilisation d'événements, le contrôle ne doit généralement pas dépendre du nombre de gestionnaires d'événements connectés. Cela devrait fonctionner indépendamment du fait qu'il y ait 0 ou 27 gestionnaires d'événements réagissant à l'événement. Si vous voulez avoir un mécanisme où vous avez plus de contrôle, vous devriez probablement envisager d'utiliser un délégué à la place. Si vous êtes limité pour utiliser le modèle d'événement et que vous souhaitez contrôler l'affectation des gestionnaires d'événements, vous pouvez hériter de la classe d'origine en créant un événement dans cette classe portant le même nom et la même signature. comme dans la classe de base (en utilisant le mot-clé new
afin que l'événement d'origine est caché) et de garder trace de la façon dont les gestionnaires d'événements sont attachés et détachés:
public class BaseClass
{
public event EventHandler SomeEvent;
}
public class MyClass : BaseClass
{
private int _refCount = 0;
public new event EventHandler SomeEvent
{
add
{
if (_refCount > 0)
{
// handler already attached
}
base.SomeEvent += value;
_refCount++;
}
remove
{
base.SomeEvent -= value;
_refCount--;
}
}
}
Je suis confus.
Pouvez-vous détecter l'appel de '+ = new EventHandler (...)' et l'arrêter ... quoi?
Je pense que vous avez juste besoin d'organiser votre code mieux. Ou re-mot votre question.
DonT exposer publiquement l'événement. l'exposer comme une propriété. cela vous donnera le contrôle lorsque des classes externes attachant des gestionnaires
classe MyClass { private EventHandler _myEvent;
public event EventHandler MyEvent
{
[MethodImpl(MethodImplOptions.Synchronized)]
add
{
_myEvent = (EventHandler)Delegate.Combine(_myEvent, value);
}
[MethodImpl(MethodImplOptions.Synchronized)]
remove
{
_myEvent = (EventHandler)Delegate.Remove(_myEvent, value);
}
}
...
}
plus d'informations sur ce ici
Pensez que c'était à peu près ce qu'il cherche. Nice, je ne savais pas que vous pouviez faire ce genre de chose en C# – James
- 1. Évitez TextBox étirement vertical
- 2. Évitez l'invite de connexion réseau
- 3. Évitez la duplication de code XAML
- 4. Ajax demande à nouveau
- 5. nouveau à Hibernate - doute
- 6. PHP et singletons à nouveau
- 7. Évitez les sondages constants de l'iPhone sur un service Web?
- 8. Évitez d'afficher le rendu incrémentiel de la table d'images.
- 9. Évitez les références circulaires dans le modèle de domaine
- 10. Évitez l'objet object_id lorsque vous utilisez andand dans Ruby 1.9?
- 11. Comment évitez-vous la gestion des noms des procédures C++?
- 12. PHP MYSQL Hyperliens et formulaires à nouveau
- 13. Erreur de publication à nouveau, erreur: 0x80880253
- 14. Fermer thickbox et l'ouvrir à nouveau
- 15. Appel de l'initialiseur statique à nouveau
- 16. android programme s'écraser (nouveau à plate-forme)
- 17. Évitez la mise en cache après la mise à jour de l'image pour Paperclip
- 18. Évitez d'entrer des guillemets à partir du début et de la fin d'une chaîne
- 19. Évitez de copier lors de l'ajout d'un fichier volumineux à FileField
- 20. De l'accès à Outlook Email et retour à nouveau
- 21. Aide Jquery: Draggable à Sortable, puis de nouveau à draggable
- 22. Ajouter un nouveau champ à plusieurs tables à la fois?
- 23. Problèmes avec les cases à cocher à nouveau asp.net
- 24. Comment configurer le comportement du correctif "affecter un nouveau paramètre à un nouveau champ" dans eclipse?
- 25. Évitez de délai de connexion lorsque vous utilisez plusieurs threads et pool de connexion
- 26. problème regex nouveau
- 27. Construire vs Nouveau problème
- 28. Nouveau sur ASP.NET
- 29. surcharger nouveau/supprimer
- 30. Opérateur de liaison nouveau?
Tu crois qu'il cherche à montrer à un message lorsqu'un gestionnaire est abonné à l'événement rendu .... ne pense pas c'est possible. – James
Eh bien peut-être j'étais un peu flou ici est la situation que j'ai mon contrôle qui hérite du contrôle DataGridView j'ai attaché Eventhandler pour l'événement CellPaint. Je veux si quelqu'un qui utilise mon contrôle attache un autre eventHandler à cet événement pour faire un message qui peut conduire à différents problèmes Cordialement, Iordan – IordanTanev