Meilleur auteur de réponses
séparateur décimal "."

Question
-
Bonjour à tous
Dans une forme j' ai des TextBox dans les quelles on entre des valeurs numériques
Ces valeurs sont comprises dans un interval miniVal et maxiVal avec message par errorprovider.
Jusque là rien de compliqué, mais mon problème est que je dois mettre un point en séparateur décimal car ces valeurs
sont écrites dans un fichier Txt pour être exploitées par Solid Works.
Dois-je utiliser format Info ou culture Info
Voici mon extrait de code.
Merci
Private Sub TextBox1_Validating(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles TextBox1.Validating
Dim errorMessage As String = _
(" Entrez une valeur numérique " _
+ Chr(13) + Chr(10) & " comprise entre 3.00 et 10.00 ")
Try
Dim a As Decimal = CDec(TextBox1.Text)
Dim SymbolDec As String
SymbolDec = Format(0, ".")
If a < 3 Or a > 10 Then
e.Cancel = True
TextBox1.Select(0, TextBox1.Text.Length)
Beep()
Me.ErrorProvider1.SetError(Me.TextBox1, errorMessage)
End If
Catch
e.Cancel = True
TextBox1.Select(0, TextBox1.Text.Length)
Beep()
Me.ErrorProvider1.SetError(Me.TextBox1, errorMessage)
Finally
End Try
End Sub
Réponses
-
Bonsoir,
Voici en deux langues, testé, chat marche !' Objets = 2 : textBox1 + bouton1 ' ' vb6 Sub Command1_Click() Dim r As String Dim t As String Text1.Text = "123.456" MsgBox ("Visu") t = Text1.Text r = Replace(t, ".", ",") Text1.Text = r End Sub ' ' vbNet Public Class Form1 Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim r As String Dim t As String TextBox1.Text = "123.456" MsgBox ("Visu") t = TextBox1.Text r = Replace(t, ".", ",") TextBox1.Text = r End Sub End Class
Nota bene : Pou ma part je n'aurais pas fait ça, non, j'aurais testé en entrée les code de saisie dans le textBox et j'aurais mis le point en virgule à ce stade (interdisant plus d'une virgule évidemment :o)
Si tu es satisfait, tu peux cliquer en haut à gauche de chacune de mes réponses dans le rectangle ou il y a le triangle vert :o)
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire- Proposé comme réponse EhJoe samedi 25 septembre 2010 20:03
- Modifié EhJoe dimanche 26 septembre 2010 05:33 Rajout
- Marqué comme réponse paris michel dimanche 26 septembre 2010 06:55
Toutes les réponses
-
Bonjour,
Pour faire pro, laissez le séparateur décimal écrit dans le TextBox en fonction des paramètres régionaux de l'utilisateur. C'est au moment ou vous allez écrire votre procédure concernant l'enregistrement du fichier SolidWorks, que vous allez formatez vos nombres décimaux avec un point.
Cordialement
Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr -
- Proposé comme réponse EhJoe samedi 25 septembre 2010 07:23
- Non proposé comme réponse Gilles TOURREAUModerator dimanche 26 septembre 2010 08:05
-
-
- Proposé comme réponse EhJoe samedi 25 septembre 2010 18:14
- Non proposé comme réponse Gilles TOURREAUModerator dimanche 26 septembre 2010 08:05
-
-
Bonsoir,
Voici en deux langues, testé, chat marche !' Objets = 2 : textBox1 + bouton1 ' ' vb6 Sub Command1_Click() Dim r As String Dim t As String Text1.Text = "123.456" MsgBox ("Visu") t = Text1.Text r = Replace(t, ".", ",") Text1.Text = r End Sub ' ' vbNet Public Class Form1 Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim r As String Dim t As String TextBox1.Text = "123.456" MsgBox ("Visu") t = TextBox1.Text r = Replace(t, ".", ",") TextBox1.Text = r End Sub End Class
Nota bene : Pou ma part je n'aurais pas fait ça, non, j'aurais testé en entrée les code de saisie dans le textBox et j'aurais mis le point en virgule à ce stade (interdisant plus d'une virgule évidemment :o)
Si tu es satisfait, tu peux cliquer en haut à gauche de chacune de mes réponses dans le rectangle ou il y a le triangle vert :o)
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire- Proposé comme réponse EhJoe samedi 25 septembre 2010 20:03
- Modifié EhJoe dimanche 26 septembre 2010 05:33 Rajout
- Marqué comme réponse paris michel dimanche 26 septembre 2010 06:55
-
Bonjour
Merci pour ton code .
A l'affichage j’obtiens bien le point, mais mon idée première était de valider la saisie du point du pavé numérique.
A ce niveau je pense qu'il ne me reste plus qu'à changer les paramètres régionaux.
Qu'en penses-tu STP
-
Bonjour,
A mon avis l'approche proposée au début par Gilles était meilleure c'est-à-dire laisser la saisie avec , et écrire les données en culture "neutre" pour avoir le . dans les fichiers. Si le problème est la touche . du pavé numérique, il est possible de répondre à sa frappe pour générer un caractère , à la place.
Changer les paramètres régionaux est sans doute la dernière des choses à faire : cela pourra causer des problèmes dans d'autres logiciels et cela risque fort de donner à la plupart des utilisateurs une opinion défavorable envers cette application. Les applications doivent respecter les réglages décidés par l'utilisateur. Si chaque appli. essayait d'imposer ses réglages cela deviendrait vite la pagaille...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered". -
Bonjour,
C'est bizarre, je croyais t'avoir répondu hier mais je ne vois rien, voici pour tester comme tu veux :
Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 'vbNet : objets = textBox1 : formes admises : x.y ou x. ou .x Select Case Asc(e.KeyChar) Case 44 ' , If InStr(1, TextBox1.Text, ",", 1) <> 0 Then e.KeyChar = vbNullChar Exit Sub End If Case 46 ' . If InStr(1, TextBox1.Text, ",", 1) <> 0 Then e.KeyChar = vbNullChar Exit Sub End If e.KeyChar = "," ' . = , End Select ' faut aussi gérer 8 <bs>, <del> ?, 13 (<cr>, "-", et de 48 à 57 ... End Sub
A compléter, mais on peut aussi tester en fin de saisie car en fait, si ensuite tu dois faire des opérations arithmétiques, certaines fonction (au moins) ne veulent que le "point", et vont donc planter sur la virgule, alors à chaque validation il faudra mettre une variable numérique doublon du texteBox pour les calculs (qui aura un "poin").
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire -
Bonjour à tous,
Si je peux me permettre, j'ai ici un code qui fonctionne en VBA/VB6 sur l'événement KeyUp.
(Je n'ai pas vraiment l'occasion de travailler dans les dernières versions de VB, dictature du boulot... ;-) .
L'idée étant d'utiliser vbKeyDecimal pour obliger un point "." dans des zones de texte non numériques, tout en laissant la possibilité d'utiliser des virgules ","<CODE>
Private Sub Txt_Reference_KeyUp(KeyCode As Integer, Shift As Integer)
Dim iSt As Integer, iLn As Integer
Dim sTT As String
If KeyCode = vbKeyDecimal Then
'le "point" du pavé décimal
iSt = Txt_Reference.SelStart
sTT = Txt_Reference.Text
iLn = Len(sTT)
Mid(sTT, iSt, 1) = "."
Txt_Reference.Text = sTT
Txt_Reference.SelStart = iSt ' repositionne le point d'insertion à la fin du texte
End If
End Sub</CODE>
Cdt, Blaise
-
Bonjour Blaise32,
Je viens de tester le code, ça ne fonctionne pas du tout :
Dim iSt As Integer, iLn As Integer Dim sTT As String If KeyCode = vbKeyDecimal Then iSt = TextBox1.SelStart sTT = TextBox1.Text iLn = Len(sTT) Mid(sTT, iSt, 1) = "." TextBox1.Text = sTT TextBox1.SelStart = iSt End If
Déja les integer ... les 32 bits sont taillés pour travailler avec des long, alors je ne sais pas si ça change quelque chose, par certain ...
KeyCode n'est pas accepté car la source c'est "e" et donc c'est de cette dernière qu'il faut extraire la valeur saisie :
e.quelquechose (key .... code, char, "asc") ...
Je ne suis pas certain que ta procédure soit du vbNet ?
TextBox1.SelStart
Or vbNet propose :
TextBox1.SelectionStart
Bref, ça ne marche pas, on dirait une procédure vb6 ... plutît vbA ...
Codialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire- Proposé comme réponse EhJoe mercredi 29 septembre 2010 06:05
-
Oui, bien entendu...
je te cite
«
Je ne suis pas certain que ta procédure soit du vbNet ?
...
Bref, ça ne marche pas, on dirait une procédure vb6 ... plutît vbA ...
»
*
Peut-être ne pas se jeter sur le code sans lire l'introduction : (je me cite)
*
«
Si je peux me permettre, j'ai ici un code qui fonctionne en VBA/VB6 sur l'événement KeyUp.
(Je n'ai pas vraiment l'occasion de travailler dans les dernières versions de VB, dictature du boulot... ;-) .
L'idée étant d'utiliser vbKeyDecimal pour obliger un point "." dans des zones de texte non numériques, tout en laissant la possibilité d'utiliser des virgules ","
»Et donc je proposais une piste à explorer.
Cdt,
Blaise -
L'idée étant d'utiliser vbKeyDecimal pour obliger un point "." dans des zones de texte non numériques, tout en laissant la possibilité d'utiliser des virgules ","
Bonsoir Blaise n°032 :o)Donc tu veux transformer le point saisi au clavier en une virgule ... Le 27/9/2010 7h42 je t'ai en fait répondu :
Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If Asc(e.KeyChar) = 46 then e.KeyChar = "," End Sub
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire- Proposé comme réponse EhJoe mercredi 29 septembre 2010 19:24
-
Bonjour EhJoe
Comme je ne suis pas le seul Blaise, il m'a fallut ajouter un numéro. J'ai pris le préfixe téléphonique de mon pays. C'est pas mon année de naissance, heureusement !
Mon idée est d'intercepter l'appui de la touche du séparateur décimal du clavier numérique. Dans une de mes applications, l'opérateur doit encoder des références essentiellement numériques avec des points. Mais parfois du texte avec, pourquoi pas, l'une ou l'autre virgule venant de la partie alpha du clavier, que l'on veut garder.
Dans le code que j'ai donné plus haut, on repère cette touche avec la constante VbKeyDecimal, qui n'existe plus après VB6 (mais toujours en VBA, le langage que je dois utiliser au boulot).
Comme je l'ai dis aussi, j'utilise peu .NET et c'est donc une PISTE que j'ai lancé.
L'aide de 2008 Express sur "VbKeyDecimal" me donne ceci : ms-help://MS.VSCC.v90/MS.msdnexpress.v90.fr/dv_vbvers/html/99be1f4d-0bee-4776-9a71-ca736d177014.htmMais après, les liens sont rompus selon la triste et détestable habitude de M$ de virer systématiquement à la poubelle ce qui a trait à la version précédente d'un pgm.
À mon avis, il faut utiliser la propriété VbCode (décimal) de ton objet e
Cdt,
Blaise<EhJoe> a écrit dans le message de news: a62afb52-4eef-4f18-8797-380fc8e0c8ee@communitybridge.codeplex.com...
L'idée étant d'utiliser vbKeyDecimal pour obliger un point "." dans des zones de texte non numériques, tout en laissant la possibilité d'utiliser des virgules ","
Bonsoir Blaise n°032 :o)
Donc tu veux transformer le point saisi au clavier en une virgule ... Le 27/9/2010 7h42 je t'ai en fait répondu :Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If Asc(e.KeyChar) = 46 then e.KeyChar = "," End Sub
Cordialement.
Joseph Attila PUSZTAY EhJoe <http://irolog.free.fr/joe/index.htm> Logiciels <http://irolog.free.fr> Romans <http://irolog.free.fr/_gratuit/10romansGratuits/index.htm> Ecrire <mailto:montmartre75018@free.fr>
--
-
BONJOUR ,voici ce que je fais en vb.net pour ma part :
au lieu d'un controle textbox j'ai en pire un fichier texte pour code fortran ou le separteur decimal est le point bien entendu .
dans un module dedie à la lecture du fichier texte
Option
Explicit On
Option
Strict On
Imports
System
Imports
System.Threading
Imports
System.Globalization
Imports
System.IO
Imports
System.Text
Module monModule
Dim CultureCourante As CultureInfo 'utilisateur
Dim CultureExtra As CultureInfo 'pour lire separateur english
Private Sub LectureDonnees
'sauvegarde culture utilisateur(fr)
CultureCourante= CultureInfo.CurrentCulture
'init cultureInfo extra pour lire separateur english
extraCulture = New CultureInfo("en-US")
'lit les valeurs des champs texte dans les 2 variables
Arcs.NSER = Integer.Parse(nserie, extraCulture )
Arcs.CAPA = Double.Parse(capa, extraCulture )'restaure culture courante dans le thread actuel
extraCulture = CultureCourante
End Sub
'-----------------------------------------------------------------
je pense que tu peux lire au clavier le point decimal en francais et parser ensuite comme suit:
Option Explicit On
Option
Strict On
Imports
System
Imports
System.Threading
Imports
System.Globalization
Imports
System.IO
Imports
System.Text
Private
Sub Lit_Valide()
'Validation en francais(utilisateur)
' TextBox1 traite variable ALPHA
Dim ALPHA As Decimal = 0.0
Dim
boolAlpha As Boolean = False
If IsNumeric(Val(TextBox1.Text)) Then
'ok
boolAlpha =
True
Else
'FAUX.....reset etc
TextBox1.Text =
""
ALPHA = 0.0
End If
' TextBox2 traite variable BETA, boolBeta = True
'ETC....
'les variables ALPHA,BETA dans mon cas sont au niveau global(publiques)....
Dim BETA As Decimal = 0.0
Dim boolBeta As Boolean = False
'.................
If boolAlpha And boolAlpha Then
Call ECRIT()
End If
'sinon retour à l'appelant (formulaire principal)
End Sub
'-----------------------------------------------------------------
Private Sub ECRIT()
'ecriture des variables en english
Dim
CultureCourante As CultureInfo 'utilisateur
Dim CultureExtra As CultureInfo 'pour ecrire separateur english
'sauvegarde culture utilisateur(fr)
CultureCourante = CultureInfo.CurrentCulture
'init cultureInfo extra pour lire separateur english
CultureExtra =
New CultureInfo("en-US")
Dim ALPHA As Decimal = 15.25
Console.WriteLine(
"F: {0}",ALPHA.ToString("F02", CultureExtra))
' affichera "F: 15.25"
'restaure culture courante dans le thread actuel
CultureExtra = CultureCourante
End Sub
End SubEnd Sub
-