Gestione punto decimale in una casella ToolStripText

di il
6 risposte

Gestione punto decimale in una casella ToolStripText

Buongiorno a tutti,

avrei necessità di risolvere il seguente problema:

ho tre caselle di testo (CoordXToolStripText,  CoordYToolStripText e LatoQToolStriptext ), le prime due vengono popolate con un doppio click su una riga di un DataGridView, mentre la terza va inputata, i valori che inserisce nelle prime due caselle sono nel seguente formato:   18.593,044 (punto per il separatore delle migliaia e virgola per la parte decimale), tali valori vengono convertiti nel formato decimale con il seguente codice:

Try
                        CoordinataX = Decimal.Parse(CoordXToolStripText.ToString, NumberStyles.Number)
                        CoordinataY = Decimal.Parse(CoordYToolStripText.ToString, NumberStyles.Number)
                        LatoQ = Decimal.Parse(LatoQToolStriptext.ToString, NumberStyles.Number)

                    Catch ex As Exception
                        MessageBox.Show("Inserire un valore numerico valido", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                        Exit Sub
                    End Try

e sin qui va tutto bene almeno per le prime due caselle. Il problema nasce quando inserisco i valori con input manuale in tutte tre le celle (ho previsto anche questa possibilità) utilizzando il tastierino numerico, per esempio: scrivo nella prima casella il valore 18236.456, nella conversione in decimale il valore diventa 18236456 (errato) in quanto come separatore decimale vuole la virgola. 

Quindi avrei necessità di un codice che mi permetta la giusta conversione anche utilizzando il tastierino numerico oppure la possibilità, in fase di input, di sostituire il punto in virgola. Qualche suggerimento?

Grazie

Giorgio

6 Risposte

  • Re: Gestione punto decimale in una casella ToolStripText

    Ciao... 

    potresti fare una cosa di questo tipo.... dove indipendentemente dal separatore "punto" o "virgola" che provenga da un immissione manuale, oppure da fields tabelle, datagrid, etc etc.. , e in aggiunta alla culture info, dovresti coprire un pò tutta la casistica:

    
        ' replace manual decimal point
        Dim coordXInput As String = CoordXToolStripText.Text.Replace(".", ",")
        Dim coordYInput As String = CoordYToolStripText.Text.Replace(".", ",")
        Dim latoQInput As String = LatoQToolStriptext.Text.Replace(".", ",")
        
    	' parsing style decimal point
        CoordinataX = Decimal.Parse(coordXInput, NumberStyles.AllowDecimalPoint Or NumberStyles.Number, CultureInfo.InvariantCulture)
        CoordinataY = Decimal.Parse(coordYInput, NumberStyles.AllowDecimalPoint Or NumberStyles.Number, CultureInfo.InvariantCulture)
        LatoQ = Decimal.Parse(latoQInput, NumberStyles.AllowDecimalPoint Or NumberStyles.Number, CultureInfo.InvariantCulture)
    
  • Re: Gestione punto decimale in una casella ToolStripText

    In fase di input puoi intercettare il punto del tastierino e sostituirlo con la virgola.

    Per il resto io lavorerei con dati float per poi rilasciarli formattati.

    Per quelli che arrivano sostituisci i punti con '' e converti in float. Fai quello che devi gare col dato e lo rilasci formattato. Per formattarlo hai solo di sapere qual è la parte intera e quale la decimale. I separatori delle migliaia li mette la formattazione.

  • Re: Gestione punto decimale in una casella ToolStripText

    25/01/2025 - By65Franco ha scritto:

    Ciao... 

    potresti fare una cosa di questo tipo.... dove indipendentemente dal separatore "punto" o "virgola" che provenga da un immissione manuale, oppure da fields tabelle, datagrid, etc etc.. , e in aggiunta alla culture info, dovresti coprire un pò tutta la casistica:

    
        ' replace manual decimal point
        Dim coordXInput As String = CoordXToolStripText.Text.Replace(".", ",")
        Dim coordYInput As String = CoordYToolStripText.Text.Replace(".", ",")
        Dim latoQInput As String = LatoQToolStriptext.Text.Replace(".", ",")
        
    	' parsing style decimal point
        CoordinataX = Decimal.Parse(coordXInput, NumberStyles.AllowDecimalPoint Or NumberStyles.Number, CultureInfo.InvariantCulture)
        CoordinataY = Decimal.Parse(coordYInput, NumberStyles.AllowDecimalPoint Or NumberStyles.Number, CultureInfo.InvariantCulture)
        LatoQ = Decimal.Parse(latoQInput, NumberStyles.AllowDecimalPoint Or NumberStyles.Number, CultureInfo.InvariantCulture)
    

    Ciao Franco,

    grazie per la risposta, ma non funziona o meglio funziona solo se l'input è manuale, nel caso di prelievo automatico da dataGridView, dove il valore è impostato con il separatore delle migliaia dal punto e la virgola per i decimali, un valore per es. di 19.386,452 verrebbe modificato con Replace  in 19,386,452, ma poi applicando decimal.parse lo converte come numero intero 19386452. Purtroppo non posso sapere quando l'input è manuale o automatico, dipende da chi utilizza l'applicazione

  • Re: Gestione punto decimale in una casella ToolStripText

    26/01/2025 - Giorgio ha scritto:

    19.386,452 verrebbe modificato con Replace  in 19,386,452, ma

    Ma hai letto cosa ti ho scritto?

    Rimpiazzi solo i separatori delle migliaia

    Diventa 19386,452 

    Lo converti da string a float e diventa un numero

    Lo rilasci con la formattazione che vuoi € 19.386,452 oppure 19.386,452 o arrotondato 19.386,45

    Lavora con dati numerici.

    Quando scrivi da tastiera 

    Se tasto=. Allora tasto =nil (non ricordo in access le virtual key ma le trovi in rete).

    Nel metodo keypress.

    Ps in access puoi mettere una maschera di input. Usa il coltellino svizzero in dotazione.

  • Re: Gestione punto decimale in una casella ToolStripText

    26/01/2025 - Giorgio ha scritto:

    Purtroppo non posso sapere quando l'input è manuale o automatico, dipende da chi utilizza l'applicazione

    Ciao... la cosa migliore è ricavare automaticamente dal sistema la culture info

    Esempio:

    	' retreive system culture
        Dim systemCulture As CultureInfo = CultureInfo.CurrentCulture
    
    	' parsing style decimal point
        CoordinataX = Decimal.Parse(CoordXToolStripText.Text, NumberStyles.Number, systemCulture)
        CoordinataY = Decimal.Parse(CoordYToolStripText.Text, NumberStyles.Number, systemCulture)
        LatoQ = Decimal.Parse(LatoQToolStriptext.Text, NumberStyles.Number, systemCulture)

    Prova a provare ;-) 

  • Re: Gestione punto decimale in una casella ToolStripText

    26/01/2025 - sihsandrea ha scritto:

    Lavora con dati numerici.

    Esatto... sempre a priori si deve decidere come trattare i valori numerici e loro rappresentazione

Devi accedere o registrarti per scrivere nel forum
6 risposte