Bonjour à tous,
Mon problème est le suivant :
J'ai un formulaire avec plusieurs champs (textbox) qui est chargé et qui affiche les informations sur la personne choisie...
Toutes mes Textbox sont "bindées" :
myTextBox.DataBindings.Add("Text" , datasource, dataMember);
Le formulaire contient égalment un boutton "save" qui lui est inactif au chargement du formulaire.
j'aimerais évidemment l'activer seulement si un champ est modifié.
cet évènement est appelé chaque fois qu'une textbox génère l'event "TextBoxChanged" :
1 2 3 4 5 6 7 8
|
private void EventHandler_PropertyChanged(object sender, EventArgs e)
{
if(GetBindingModificationState(myTextBox);
{
myButtonSave.enable = true ; //enbale si il y a eu un changement...
}
} |
puis cette méthode qui me permet de savoir si la valeur du champ a été modifiée... :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| private bool GetBindingModificationState(Control control)
{
if(control.DataBindings.Count>0)
{
Binding b = control.DataBindings[0];
if(b==null) return true;
FieldInfo i = b.GetType().GetField("modified", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic);
//mon problème vient d'ici, la première fois ==> toujours false !
return (bool)i.GetValue(b);
}
else
{
return true;
}
} |
Cela marche presque parfaitement, le seule problème que j'ai, c'set que la première fois que l'évènement TextBoxChanged est appelé, ma méthode retourne toujours false et le bouton save n'est pas mis à jour. si je tape un deuxième caractère dans ma textbox, cela fonctionne...
Partager