Mi piacerebbe capire come hai ragionato, nel senso che non ho ben capito le differenze fra i B4XFormatter, i B4XFormatData, DefaultFormat, ecc. Devo andare a leggermi bene
questo che ho trovato solo ora (avevo cercato poco e male evidentemente)
Lo sto leggendo adesso. Per dirne una, pensavo si usassero solo con le B4XTable, che addirittura ne facessero parte. Invece, come scritto nel tutorial (inglese; non ne scrivo uno in italiano, vista la fine del precedente, sulle B4XPages ? ), riassumo qui quanto ho capito (e capirò).
(Qualcosa, che non posso scrivere, mi ha distratto [e fatto incacchiare]. Riprendo da qui)
Formatter è l'oggetto base (la classe base; al solito: oggetto = istanza di classe, per cui si dovrà creare una variabile di tipo B4XFormatter ed inizializzarla).
Ad esso si possono aggiungere N oggetti di tipo
B4XFormatData, che in pratica hanno le "istruzioni" (proprietà) su come dovranno essere visualizzati dati numerici.
Di default l'oggetto di tipo B4XFormatter che creerete avrà già un B4XFormatData, con valori di default. Per accedere a quest'ultimo, si potrà usare il metodo GetDefaultFormat (es. creo una variabile xFormatter, la inizializzo e con xFormatter.GetDefaultFormat otterrò il B4XFormatData già creato di default).
Invento al volo un esempio, creando alcuni oggetti B4XFormatData (mentre guardo Poirot, quindi non sarà un esempio eccezionale ?. Ecco, lo avevo già visto).
Dim xFormatter As B4XFormatter
xFormatter.Initialize
'Esempio di Erel: creo un nuovo oggetto di tipo B4XFormatData che sarà utile per formattare valori numerici negativi.
'Posso dargli il nome che voglio, ovviamente, quindi cambio quello dato da Erel, solo per "chiarire".
'Tanto per non crearlo da zero, con Inizialize e impostando già alcune proprietà, come il numero di decimali, il simbolo per i decimali, etc.
'copio i dati, le proprietà dall'oggetto di tipo B4XFormatData che viene creato automaticamente, di default, quando inizializzo xFormatter.
Dim frmtNegatives As B4XFormatData = xFormatter.CopyFormatData(xFormatter.GetDefaultFormat)
frmtNegatives.TextColor = xui.Color_Red
frmtNegatives.Prefix = "$ ("
frmtNegatives.Postfix = ")"
frmtNegatives.FormatFont = xui.CreateDefaultBoldFont(15)
'Aggiungo a xFormatter (che ricordo è la base) questo nuovo oggetto di tipo B4XFormatData.
'Mi servirà quando vorrò scrivere, ad esempio in una Label, un valore numerico negativo, ovvero tra MIN_VALUE e 0 (zero), questi due esclusi (quel False).
xFormatter.AddFormatData(frmtNegatives, xFormatter.MIN_VALUE, 0, False) 'from MIN_VALUE to 0 not including the edges
'
'Ora potrei creare un altro oggetto di tipo B4XFormatData, ad esempio se un importo sarà superiore a 10.000€ dovrà essere visualizzato in Blu!
Dim frmt10000 As B4XFormatData = xFormatter.CopyFormatData(xFormatter.GetDefaultFormat)
frmt10000.TextColor = xui.Color_Blue
'Aggiungo a xFormatter (che ricordo è la base) questo nuovo oggetto di tipo B4XFormatData.
xFormatter.AddFormatData(frmt10000, 10000, xFormatter.MAX_VALUE, True)
Nel mio progetto, in una Label potrò scrivere:
Label1.Text = "100" ' Le doppie virgolette non sarebbero necessarie
'Oppure:.
Label1.Text = NumberFormat2(...)
'O ancora, avendo creato xFormatter come sopra, come variabile globale nel modulo che sto scrivendo (ad esempio una B4XPage):
xFormatter.FormatLabel(100, Label1) ' Verrà usato il B4XFormatData di default.
xFormatter.FormatLabel(-78, Label1)' Verrà usato il B4XFormatData frmtNegatives, quindi in rosso e tra $().
xFormatter.FormatLabel(15999, Label1) ' Verrà usato il B4XFormatData frmt10000, quindi verrà scritto in blu, visto che è >= 10000
Le altre proprietà degli oggetti B4XFormatData (che modificano l'aspetto dell'output) sono:
B4XFormatData fields:
- Prefix - Un testo che sarà visualizzato prima del numero.
- Postfix - Un testo che sarà visualizzato dopo numero.
- MinimumIntegers - Il numero minimo di interi che si vuole visualizzare.
- MinimumFractions - Il numero minimo di cifre decimali che si vuole visualizzare.
- MaximumFractions - Il numero massimo di cifre decimali che si vuole visualizzare.
- GroupingCharacter - Il carattere che si vuole visualizzare come separatore delle migliaia.
- DecimalPoint - Il carattere che si vuole visualizzare come separatore dei decimali.
- TextColor / FormatFont - Da usare con FormatLabel.
- RemoveMinusSign - Impostarlo su True per non visualizzare il segno meno con i numeri negativi.
Mi pare di averlo scritto decentemente ? (Spero senza errori, visto che l'ho scritto direttamente qui e non l'ho testato).
P.S. A quanto pare, anziché il metodo Format del formatter, si deve usare il metodo FormatLabel. Quindi correggo il codice qui sopra.