Bonjour à tous, j'espère que vous pourrez m'aider sur un problème plutôt difficile très difficile à régler d'ou la longeur du message pour mieux comprendre ce qui se passe.
C'est la faute au comportement plutôt étrange du contrôle RichTextBox dés lors que celui-ci est utilisé avec du texte enrichie et lié à une base de données. En effet je ne sais pas si vous avez remarqué mais celui-ci à une fâcheuse tendance à modifier la propriété HasChanges du Dataset alors que je ne fait que de la navigation ou de la lecture. C'est très problématique puisque je me sers de cette propriété pour détecter les modifications effectuées dans le programme pour proposer un enregistrement à la fermeture du programme. Du coup j'ai systématiquement une proposition de sauvegarde à la fermeture du programme alors que je n'ai rien modifié.
Pour régler ce problème j'ai supprimé le binding direct de ce contrôle avec la source de données pour utiliser à la place la méthode Writevalue pensant ainsi que je pourrais rectifier le comportement de ce contrôle. Cette solution m'a permis effectivement de régler le problème de la modification de hasChanges du DataSet pendant la lecture et la navigation. Maintenant j'ai du trouver un moyen de détecter les modifications dans le contrôle lui-même : pour cela je fait un WriteValue dans l’évènement Validating du contrôle. Problème : je retombe à nouveau dans la même problèmatique, c'est à dire :
j'ai 2 événements validating qui se produisent
- le 1er est voulu et se déclenche soit en sortant du contôle soit au moment d'enregistrer en forçant l'exécution de cet évènement.
- le 2eme n'est pas voulu : il se produit si le 1er évènement à eu lieu et en sortant du contôle.
- la propriété HasChanges repasse à True aprés que le 2éme évenement validating se soit produit.
Extrait de code pour mieux comprendre :
l'evenement validating :
la méthode enregistrer qui se produit si HasChanges=True à la fermeture du logiciel : (A noter que les contrôles RichtextBox se trouvent sur des feuilles MDIChild)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim BindingSourceTaches As BindingSource Dim BindRichTextBox As Binding AddHandler RichTextBoxJmb1.RichTextBox.Validating, AddressOf EventRichTextBoxValidating Private Sub EventRichTextBoxValidating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) BindRichTextBox.WriteValue() BindingSourceTaches.EndEdit() End Sub
Donc si vous m'avez bien suivi jusque là, j'ai 2 événements validating qui se produisent et la propriété hasChanges qui repasse à True après l'enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub Enregistrer() For Each frm As Form In Me.MdiChildren frm.ValidateChildren() ' Obligatoire sinon les modifications dans les controles RichTextBox sont perdues. Next Call SaveDataset() ' procédure de sauvegarde du Dataset. MonDataset.AcceptChanges End Sub
Je tourne en rond et je ne sais vraiment pas comment faire pour supprimer ce 2éme évènement ainsi que la modification indésirable de hasChanges.
C'est chaud comme problème, je vous l'accorde mais je me traîne cette casserole depuis le début et j'ai pour ainsi dire terminé mon programme à part ça alors si vous pouvez m'aider ça serait super.
Partager