Bonjour,
Dans un formulaire, j'ai un contrôle de type NumericUpDown et un contrôle personnalisé de type StarRate (équivalent à un NumUpDown mais affiche des étoiles de 1 à 5 pour attribuer une note)
Je suis toujours en train de fiabiliser ce contrôle personnalisé que j'évoquais ici
Mon StarRate a une property Value qui doit fonctionner comme le NumericUpDown (NUD).
Voici le code de cette property :
(Il y a bien sûr une sub OnPaint qui décrit comment colorier les étoiles en fonction de value).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Public Property Value() As Integer Get Return StarValue End Get Set(ByVal value As Integer) If value > StarCount Then StarValue = StarCount Else StarValue = value End If Me.Refresh() End Set End Property
Mon formulaire est en fait lié à une table. Je passe d'un enregistrement à l'autre à l'aide d'un BindingNavigator qui contient aussi un bouton AddNew (natif dans le BindingNavigator)
En cliquant sur ce bouton AddNew, les champs du formulaire doivent s'effacer pour permettre la saisie d'un nouvel enregistrement par l'utilisateur.
Il se trouve que ce bouton AddNew a, par construction de VB.NET, la gentillesse de simuler l'équivalent d'un bindingsource.addnew quand on clique dessus (j'ai découvert cela par hasard).
En revanche, il faut effacer les champs par le code.
Ce qui donne :
A la ligne 4, le champ StarRate est bien mis à zéro, si l'enregistrement affiché comportait une valeur non nulle, mais sitôt le End Sub passé, ce champ reprend la valeur d'avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub AjouterEnregistrement(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddNewItem.Click NumericUpDown1.Value = 0 ' pour mon NUD Textbox1.Clear() ' pour un champ de type textbox ; on peut aussi faire TextBox1.text = Nothing StarRate1.Value = 0 ... End Sub
J'ai remarqué que ce n'est pas le cas du NUD qui reste bien à 0 après le End Sub
J'ai remarqué que je peux résoudre le pb en ajoutant après la ligne 4 :
Mais ce n'est pas très élégant, car cela m'oblige à restaurer explicitement le DataBinding pour ce champ si je clique sur le bouton Cancel du bindingnavigator alors que, pour les autres champs, un simple Bindingsource.CancelEdit règle la question (c'est-à-dire suffit à restaurer les valeurs des champs avant le clique sur AddNew)
Code : Sélectionner tout - Visualiser dans une fenêtre à part StarRate1.DataBindings.Clear()
J'en déduis que le code de ma property est incomplet.
Mon idée est de m'inspirer de la property Value du NUD qui, lui, se comporte bien comme attendu.
En résumé, quelqu'un pourrait-il m'aider à trouver le code source complet de la propriété Value de la classe NumericUpDown ou (plus difficile), me dire ce qui manque dans le code de ma propriété pour que mon contrôle personnalisé se comporte comme le NUD face à un ajout d'enregistrement (et son annulation) lorsque le contrôle est lié à un DataBinding ?
Partager