Somma campi formattati

Ciao a tutti,
sono un p petulante perch sono all’inizio con xojo e trovo alcune difficolt. Ho dei campi formattati in euro appena scatta il LostFocus, io ho bisogno che ogni volta che l’utente inserisce o modifica uno di essi vanno ad aggiungersi in un campo totale, ma ho difficolt perch il campo testo, anche trasformandolo con Val, vede l’ come carattere e mi azzera tutto. Potete aiutarmi?
Grazie ancora
Umberto

€: Non utilizzare Val, ma CDbl (e Format).

Ci scusiamo per il resto, Google Translate tradotto male, non ho capito il problema.

Emile,
funziona, ma elimina i decimali dal campo digitato mentre nel totale sono perfettamente riportati

Questo il mio codice:

Dim totale As Double

totale = CDbl(ReplaceAll(txtcontingenza.text,",","."))

txttotalebase.Text=Str(totale/100)

Me.Text = Format(val(Me.Text), “\###,###,###0.00”)
txttotalebase.Text = Format(val(txttotalebase.Text), “\###,###,###0.00”)

necessario rimuovere il segno di Euro () prima di passare attraverso la Val () txtcontingenza.text / Me.Text / txttotalebase.Text, probabilmente.

http://documentation.xojo.com/index.php/Val
"12AA54" returns 12
MsgBox Format(Val("12,55"),"\\###,###,###0.00") // Returns 0.00

Avevo risolto creando un textfield personalizzato.
utilizzato GET e SET per impostare il contenuto formattato
ovviamente inserisci una propriet di tipo ‘Computed Property’
magari la chiami importo o prezzo o come vuoi
cos ricavi il valore gi pulito ad esempio

rsitem.field("Importo").currencyvalue = txtimporto.prezzo 

ed eventualmente il contrario 

txtimporto.prezzo = rsitem.field("importo").currencyvalue

[quote]Avrai notato che ho utilizzato currency e non double, questo perch finanziariamente double genera caos, ho scritto un’intero software ERP con xojo e il primo problema con i numeri lo ho incontrato in fase di elaborazione del bilancio e della scheda dare/avere perch non riuscivo mai ad ottenere la quadratura proprio per i problemi dei dati di tipo double.

Definisci pure i campi nel db in formato double ( non usare currency non serve ) e leggili e scrivili in formato currency[/quote]

su GET ho inserito :

return me.text.CDbl

per potresti modificarlo in questo modo

dim sRitorno as string
dim cRitorno as currency

sRitorno = me.text
sRitorno = replace(sRitorno,"","")
cRitorno = cdbl(sRitorno)
return cRitorno 

Su SET invece fai in questo modo :

me.text = format(value,"\\-#,###,###,###.000")

sull’evento GotFocus metti :

me.Format = ""

sull’evento LostFocus invece metti :

me.format = "\\-#,###,###,###.000")

L’idea del get/set corretta.
Puoi, per essere un po’ pi generale e meno legato a condizioni locali, creare una sottoclasse del textField con:
una propriet moneyUnit as text (o string se vuoi) che puoi preimpostare a quella locale (xojo.core.locale.current.CurrencySymbol) o variare (ad esempio per esprimere in dollari o altra valuta)

sul LostFocus
me.value=me.text.replace(me.moneyUnit,"").replace(xojo.core.locale.current.DecimalSeparator,".").val
dove value una propriet double (ne parliamo dopo) e in questo modo accetti come separatore del decimale sia la scrittura locale che quella di base (ovvero con il punto)

value un propriet double con get e set
il get ti permette di avere direttamente il valore per i calcoli
il set formatta il campo con
mvalue = value
me.canUpdate=False
me.Text=Format(value,""+me.moneyUnit+"\ #,###.00")
me.canUpdate=true

sul GotFocus
ripristini il campo senza separatore delle migliaia (per non confondere la decodifica nazionale e internazionale)
me.text=Format(value,""+me.moneyUnit+"\ #.00")

Il vantaggio avere un campo che accetta qualsiasi valuta senza dover scrivere nulla, decodifica il campo sia con il separatore nazionale (,) che no (.) e che puoi interrogare velocemente senza dover convertire ogni volta il valore (il pi delle volte farai questo)

Scusami Antonio, io ho creato una sottoclasse di textfield come dicevi tu, ora sul keydown controllo se il campo numerico per evitare che venga digitato un carattere al posto di un numero (la uso anche per i campi double precision).
Ho creato una propriet value di tipo double che si attiva con il keydown. Ora va tutto bene se io riempio i campi la prima volta, mi fa le somme perfettamente Il mio problema quando leggo dal db, riempio i campi text sulla form ma se ne cambio uno solo tutti i value sono a zero e il mio calcolo tiene conto solo del campo variato. Dove sbaglio? Non ho creato “una propriet moneyUnit as text da preimpostare a quella locale (xojo.core.locale.current.CurrencySymbol) o variare (ad esempio per esprimere in dollari o altra valuta)” come hai scritto tu perch non ho capito come preimpostarla.
Se puoi farmi un esempio sono un neofita in xojo
Grazie

Non devi riempire il text dal db, devi riempire il value (la propriet computata) che poi nel suo set andr a riempire il text

Scusa Antonio ma canUpdate cosa . Ho fatto una ricerca su tutto l’help di xojo , e sui forum, ma non ne ho trovato traccia
grazie

una propriet booleana del campo (che mi sono scordato a suo tempo di esplicitare)
La utilizzi capire se stai inserendo un dato da “lettura” o “lato utente”

Ad esempio:
poniamo che vuoi abilitare un pulsante “salva” quando l’utente inserisce i dati nel campo.
Ma se stai leggendo da db (come nell’esempio) questo non deve accadere. Per cui utilizzi questa propriet come hai visto.
Poi nel textChanged (o simile) basta un if canUpdate then… abilita

… solo d’utilit non necessario, ma per me ormai codice standard.

Grazie Antonio, auguri