Voilà mon problème qui m’embête un peu :
J’ai une classe abstraite qui déclare quelques méthodes, quelques propriétés, et surtout qui contient un event Modified.
Le but est de gérer un fichier de configuration XML qu’on sérialise / désérialise.
Bref les objets à sérialiser sont tous des instances de classes dérivées de ma classe abstraite, contenant cet event.
Je colle le code de ma classe abstraite :
[code]using System;
using System.ComponentModel;
using System.Xml.Serialization;
namespace PMLSync
{
public abstract class XmlConfigClass
{
private bool m_IsModified;
private bool m_RaiseEvents;
public XmlConfigClass()
{
this.m_IsModified = false;
this.m_RaiseEvents = true;
}
[XmlIgnore()]
public bool IsModified
{
get { return m_IsModified; }
}
public event EventHandler Modified;
protected void SetValue<T>(ref T var, ref T value)
{
if (!var.Equals(value))
{
var = value;
if (this.m_RaiseEvents)
{
this.m_IsModified = true;
if (this.Modified != null)
this.Modified(null, EventArgs.Empty);
}
}
}
public void ResetModifiedFlag()
{
this.m_IsModified = false;
}
}
}[/code]
Maintenant un bout de code simplifié de l’une des classes dérivées :
[code]using System;
using System.ComponentModel;
using System.Xml.Serialization;
namespace PMLSync
{
[Serializable()]
public class XmlConfigSqlServer : XmlConfigClass
{
private string m_StringAlaCon;
private const string S_DEFAULT_STRINGALACON = "Powered by Murphy laws";
[DefaultValue(S_DEFAULT_STRINGALACON)]
public string StringAlaCon
{
get { return this.m_StringAlaCon; }
set { this.SetValue<string>(ref this.m_StringAlaCon, ref value); }
}
public XmlConfigSqlServer()
{
this.m_StringAlaCon = S_DEFAULT_STRINGALACON;
}
}
}[/code]
Le SetValue doit donc lever un event en cas de désérialisation de mon fichier XML (puisqu’il passe par les champs publics, donc traverse le setter pour atteindre le SetValue défini dans ma classe abstraite), ou n’importe quoi d’autre.
Dans mon cas c’est une textbox qui vient changer la valeur via une fenêtre de configuration.
Dans mon appli, j’ajoute bien des EventHandler sur l’event de ma classe dérivé, et depuis le contexte formulaire, le debugger voit bien que l’event est pas null.
En faisant du pas à pas, on traverse le setter, on arrive dans ma classe abstraite, à l’intérieur de SetValue et là, this.Modified est null, l’event est pas levé…
A côté de ça, les autres variables, comme m_IsModified, sont bien comme il faut…
Je ne comprend vraiment pas…
Merci d’avance à celui / ceux qui sauront trouver réponse à ça.