Si tu regarde le code que je t'ai posté au début attentivement, tu verra que j'ai mixé les "." et "," exprès pour te montrer que cela n'avait pas d'importance dès lors que l'on utilisé le CulturInvariant lors du parsing.
Si tu regarde le code que je t'ai posté au début attentivement, tu verra que j'ai mixé les "." et "," exprès pour te montrer que cela n'avait pas d'importance dès lors que l'on utilisé le CulturInvariant lors du parsing.
Tu comprends pas... quand tu fais le calcules, c'est trop tard !
Le pas à pas, c'est pour quand tu tapes le Point, pour voir pourquoi il n'est pas remplacé par la virgule.
C'est ça que tu cherches a debugger... On le sait déjà que le calcule ne marche pas....
Mets un breakpoint(F9) à ta ligne de code
lance ton prog et tape le pavé numerique dans un des textbox
Code : Sélectionner tout - Visualiser dans une fenêtre à part Sub PointEnVirgule(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs)
est ce que le debugger s'arrete au point d'arret ?
Suit avec les points d'arrêt comme indiqué par mactwist69 et shayw
Sinon, si tu as du mal, fait un test sur un form vierge.
Ajoute ce code
Dans le load de la form rajoute ces 2 lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub InitControl() Dim txt As TextBox Dim gb As GroupBox Dim gb2 As GroupBox ' un textbox txt = New TextBox txt.Name = "txt1" txt.Location = New Point(10, 20) ' un groupbox gb = New GroupBox gb.Name = "gb1" gb.Location = New Point(10, 10) gb.Height = 300 gb.Width = 500 gb.BackColor = Color.LemonChiffon gb.Text = "1er" ' un groupbox pour imbriquer gb2 = New GroupBox gb.Name = "gb2" gb2.Location = New Point(10, 60) gb2.Height = 100 gb2.Width = 200 gb2.Text = "2ème inclus" gb2.BackColor = Color.LightBlue ' ajout du textbox dans gb2 gb2.Controls.Add(txt) ' ajout du gb2 dans gb1 gb.Controls.Add(gb2) ' un nouveau textbox txt = New TextBox txt.Name = "txt2" txt.Location = New Point(10, 20) ' ajout du textbox dans gb1 gb.Controls.Add(txt) ' ajout de gb1 dans la form Me.Controls.Add(gb) End Sub
Toujours avec la classe outil
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 InitControl() ' cré texbox et groupbox Outils.SetEventTxtsKeyPress(Me) ' ajoute les events keypressed sur les textbox
tu verras ainsi le fonctionnement et pourra le reproduire dans ton code (prend bien tout le code de ce post pour tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Public Class Outils Public Shared Sub SetEventTxtsKeyPress(conteneur As Control) For Each ctrl As Control In conteneur.Controls ' parcour de la collection des contrôles du conteneur Select Case True ' select sur true (condition vrai), qui sera vérifié sur chaque case si "ctrl" correspond au type de controle Case TypeOf ctrl Is TextBox AddHandler ctrl.KeyPress, AddressOf OnPointEnVirgule Case TypeOf ctrl Is Panel, TypeOf ctrl Is GroupBox SetEventTxtsKeyPress(ctrl) ' traite les conteneurs enfants (récursif) End Select Next End Sub Public Shared Sub OnPointEnVirgule(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) e.Handled = (e.KeyChar = ".") ' traite exclusivement le point : <== mettre un point d'arrêt If e.Handled Then TryCast(sender, TextBox).AppendText(",") ' rajoute une virgule (ne pas mettre cette ligne si l'on ne veut rien faire à la place, l'utilisateur devra utiliser la virgule) End Sub End Class
[Edit] Complément
tu peux même simplifier OnPointEnVirgule ainsi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Shared Sub OnPointEnVirgule(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) If (e.KeyChar = ".") Then e.KeyChar = "," ' transformation directe du point en virgule End Sub
Pour être sur de toute façon je le répétè tu peut parser ainsi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Dim val1 As String Dim val2 As String val1 = "1.03" val2 = "3,5" Dim res1 As Double Dim res2 As Double Double.TryParse(val1, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, res1) Double.TryParse(val1, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, res2)
Merci pour toutes vos réponses, je teste tout ce que vous m'avez donné et je vous redis !
Merci pour l'exemple rv26t parce qu'en effet, j'ai du mal
YEEEEEEAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH !!!!!
Alors pourquoi ça ne marchait pas ? Parce que mes controles étaient dans des groupbox, dans des panel mais aussi dans un grand Tabcontrol !!!
du coup je l'ai rajouté dans la classe outils et zou !
Vous êtes mes Sherlock, mes génies, mes héros, mes dieux !!
Merciiiii merci merciiiii plein plein de fois =D
(vous me reverrez surement je crois que j'aurai d'autres probleme à resoudre... )
De rien, pense à marquer en résolue avec le bouton en bas
Et utilise bien cette méthode, elle placera la virgule quelle que soit la position du curseur lors de la saisie. (au cas ou l'utilisateur revient en arrière avec les flèches ou la souris)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Shared Sub OnPointEnVirgule(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) If (e.KeyChar = ".") Then e.KeyChar = "," ' transformation directe du point en virgule End Sub
Très bien chef ! En effet ça peut etre utile !
Il faut marquer comme résolue... en bas de cette page, à gauche... un bouton vert...
Bonjour,
Je me permet de re-ouvrir ce sujet car ma classe Outils (permettant de taper une point et de générer une virgule, code ci-après) fonctionne sur tous mes contrôles sauf dans les cellules de mon DataGridView, alors je m'empresse d'ajouter le "typeof ctrl" mais j'essaie tout un tas de nom de controle pour signifier les cellules du datagridview mais rien y fait :/
Quelqu'un saurait-il comment ajouter cela ?
Voci le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Public Class Outils Public Shared Sub SetEventTxtsKeyPress(ByVal conteneur As Control) For Each ctrl As Control In conteneur.Controls ' parcour de la collection des contrôles du conteneur Select Case True ' select sur true (condition vrai), qui sera vérifié sur chaque case si "ctrl" correspond au type de controle Case TypeOf ctrl Is TextBox AddHandler ctrl.KeyPress, AddressOf OnPointEnVirgule Case TypeOf ctrl Is DataGridView ' marche pas ... AddHandler ctrl.KeyPress, AddressOf OnPointEnVirgule Case TypeOf ctrl Is Panel, TypeOf ctrl Is GroupBox, TypeOf ctrl Is TabPage, TypeOf ctrl Is TabControl, TypeOf ctrl Is DataGridView ' marche pas .. SetEventTxtsKeyPress(ctrl) ' traite les conteneurs enfants (récursif) End Select Next End Sub Public Shared Sub OnPointEnVirgule(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) If (e.KeyChar = ".") Then e.KeyChar = "," ' transformation directe du point en virgule End Sub End Class
Peut être parce que le controle dans lequel tu ajoute le texte n'est pas une DataGridView mais quelque chose comme une DataGridViewCell
et bien je ne pense pas non, mais j'ai essayé tous les truc que je pouvais il met souvent une erreur comme quoi le type n'est pas compatible etc ..
Ainsi :
Attention je n'ai pas mis le tabcontrol dans la récusivité sur les conteneurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Public Shared Sub SetEventTxtsKeyPress(conteneur As Control) For Each ctrl As Control In conteneur.Controls ' parcour de la collection des contrôles du conteneur Select Case True ' select sur true (condition vrai), qui sera vérifié sur chaque case si "ctrl" correspond au type de controle Case TypeOf ctrl Is TextBox AddHandler ctrl.KeyPress, AddressOf OnPointEnVirgule Case TypeOf ctrl Is Panel, TypeOf ctrl Is GroupBox SetEventTxtsKeyPress(ctrl) ' traite les conteneurs enfants (récursif) Case TypeOf ctrl Is DataGridView AddHandler DirectCast(ctrl, DataGridView).EditingControlShowing, AddressOf DGV_EditingControlShowing End Select Next End Sub Public Shared Sub OnPointEnVirgule(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) 'e.Handled = (e.KeyChar = ".") ' traite exclusivement le point If (e.KeyChar = ".") Then e.KeyChar = "," End Sub Public Shared Sub DGV_EditingControlShowing(sender As System.Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) RemoveHandler e.Control.KeyPress, AddressOf Outils.OnPointEnVirgule AddHandler e.Control.KeyPress, AddressOf Outils.OnPointEnVirgule End Sub
La vache ! Celui-là fallait le deviner !
Code : Sélectionner tout - Visualiser dans une fenêtre à part Public Shared Sub DGV_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs)
T'es mon Dieu, c'est tout.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager