J'ai une classe statique handler interaction de base de données MS SQL avec un gestionnaire d'événements comme celui-ci:C# gérer plusieurs événements pour un événement
public static event EventHandler<SQLExceptionEventArgs> SQLExceptionCaught;
alors j'ai une fonction pour gérer:
private static void OnSQLExceptionCaught(SqlException e)
{
if (SQLExceptionCaught != null)
{
SQLExceptionCaught(SQLExceptionCaught.Target, new SQLExceptionEventArgs(e));
}
}
J'ai aussi un formulaire personnalisé héritée de Windows.Forms.Form qui ajoute un délégué à ce gestionnaire d'événements:
DBHandler.SQLExceptionCaught += this.handleSQLException;
(il est supprimé lorsque le formulaire se ferme)
puis ce délégué est remplacé dans chaque formulaire.
Cela fonctionne correctement quand un seul formulaire est ouvert, mais je ne peux pas le faire fonctionner pour plusieurs formulaires afin qu'il tire uniquement le délégué du formulaire qui a réellement déclenché l'événement.
Pourriez-vous me diriger dans la bonne direction? Est-ce même possible?
Je considérerais volontiers n'importe quelle autre solution tant qu'elle conserverait cette fonctionnalité.
Cela n'a aucun sens. Vous ne pouvez pas vraiment faire cela avec un seul gestionnaire de base de données global, sauf si vous passez le formulaire avec chaque requête/commande. En fait, c'est exactement le point où vous envoyez 'SQLExceptionCaught.Target', plutôt que le véritable * expéditeur *. Si chaque requête/commande passe l'expéditeur (le formulaire qui a provoqué l'exécution de cette requête), vous pouvez juste comparer l'expéditeur à 'this' dans le gestionnaire, et savoir si c'est" votre "exception ou non. Mais vous préférerez probablement conserver une instance distincte du gestionnaire de base de données de toute façon. – Luaan