L'argomento era già stato trattato tempo addietro sul forum.
Cmq io personalmente adotto questo codice per sostituire il "." con la virgola:
PUBLIC SUB TextBox1_Change()
IF InStr(TextBox1.Text, ".") THEN
TextBox1.Text = Replace$(TextBox1.Text, ".", ",")
END IF
END
Ricordati però che Gambas (come tutti i linguaggi) adotta internamente la separazione decimale internazionale, che è il "." e non la virgola come in Italia, per cui in fase di calcolo devi risostituire la virgola con il punto, altrimenti non torna nulla.
Per il controllo numerico del campo ed il relativo filtraggio, uso invece questo (arzigogolato) codice, che cerca di tener presente di tutte le situazioni:
PUBLIC SUB TextBox1_LostFocus()
DIM Aiuto AS Integer
DIM Comodo, Comodo2, Comodo3 AS String
DIM Importo AS Single
Comodo = Trim(TextBox1.Text)
IF Len(comodo) = 0 THEN
RETURN
END IF
comodo = Replace$(comodo, " ", "")
Comodo = Replace$(Comodo, ",", ".")
Comodo3 = ""
FOR aiuto = 1 TO Len(comodo)
comodo2 = ""
SELECT CASE Mid(comodo, aiuto, 1)
CASE "0" TO "9"
Comodo2 = Mid(comodo, aiuto, 1)
CASE "-"
Comodo2 = "-"
CASE "."
Comodo2 = "."
CASE ELSE
Comodo2 = ""
END SELECT
Comodo3 = Comodo3 & Comodo2
NEXT
IF Len(comodo3) < 1 THEN
TextBox1.text = ""
RETURN
END IF
IF IsNumber(CSng(comodo3)) = FALSE THEN
TextBox1.Text = ""
RETURN
END IF
Aiuto = InStr(comodo3, ".")
IF aiuto = 0 THEN
comodo3 = comodo3 & ".00"
ELSE
Comodo2 = Mid(comodo3, aiuto + 1)
IF Len(comodo2) > 2 THEN
comodo2 = Left(comodo2, 2)
ELSE IF Len(comodo2) < 2 THEN
comodo2 = comodo2 & String(2 - Len(comodo2), "0")
END IF
comodo3 = Left(comodo3, aiuto) & comodo2
END IF
importo = CSng(Comodo3)
TextBox1.Text = Format(importo, "-##,###,##0.00")
END
Cosa fa?
1) toglie tutti gli spazi;
2) risostituisce la "," con il "." come separatore decimale;
3) preleva dal campo solo i numeri, il "." e l'eventuale segno meno (numeri negativi);
4) se non c'è il punto lo inserisce e mette 2 zeri in fondo alla stringa (questo perché quel codice converte in valuta, per cui come regola deve essere sempre specificata anche la parte decimale. Tu puoi considerare l'assenza del punto come l'inserimento di un intero e la presenza di esso come inserimento di un numero in virgola mobile). Se c'è il punto, prende solo 2 decimali (se sono di meno, aggiunge uno zero).
5) alla fine, formatta il risultato per essere uguale ad una valuta.
Il codice è abbastanza semplice e lo puoi adattare alle tue esigenze. Miglioralo, perché io lo scrissi tempo fa e non l'ho più controllato: è brutto da vedersi...