none
séparateur décimal "." RRS feed

  • 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

    samedi 25 septembre 2010 04:48

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
    samedi 25 septembre 2010 20:03

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
    samedi 25 septembre 2010 07:15
    Modérateur
  • Bonjour,

    Par exemple :

    dim r = Replace(texte,  ",",  "." )
    

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse EhJoe samedi 25 septembre 2010 07:23
    • Non proposé comme réponse Gilles TOURREAUModerator dimanche 26 septembre 2010 08:05
    samedi 25 septembre 2010 07:22
  • bonjour 

    Je vous remercie mais en fait je voudrais valider la saisie du point dans les TextBox

    Cdlt

     

    samedi 25 septembre 2010 16:48
  • Bonsoir,

    Alors :

    dim r = Replace(textbox1.texte, ",", "." )
    ' ça marche peut être ?
    

    Cordialement

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse EhJoe samedi 25 septembre 2010 18:14
    • Non proposé comme réponse Gilles TOURREAUModerator dimanche 26 septembre 2010 08:05
    samedi 25 septembre 2010 18:14
  • Bonsoir EhJoe

    Non cela ne fonctionne pas car mon errorprovider se déclenche

    je regarde aussi avec indexof( ".") = -1 , mais même probleme

    je me demande si ça ne vient pas du fait  que je déclare une valeur décimale

    Cdlt

    samedi 25 septembre 2010 18:28
  •  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
    samedi 25 septembre 2010 20:03
  • 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 

    dimanche 26 septembre 2010 08:25
  • 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".
    dimanche 26 septembre 2010 19:46
    Modérateur
  • 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
    lundi 27 septembre 2010 07:42
  • 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

    mardi 28 septembre 2010 16:22
  • 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
    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

    mercredi 29 septembre 2010 17:14
  • 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
    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.htm

    Mais 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>
    --

    jeudi 30 septembre 2010 16:16
  • 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

    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

     

     

     

     

     

     


     

    mardi 9 novembre 2010 19:28
  • Bonjour Blaise,

    Oui, j'ai lu trop vite, désolé :o)

    Mais ce qui marche en VBA marche en partie en vb6 qui marche en partie en vbNet, alors il faudrait adapter le principe ...

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 9 novembre 2010 20:19