Usare il Punto del tastierino come Virgola

Salve a tutti,
In una listbox ho una cella dove inserisco un prezzo.
Usando il tastierino numerico, battendo il tasto “.” ovviamente esce un punto e non una virgola
mi chiedevo come posso fare per fare in modo che il tasto “punto” del tastierino restituisca una “virgola”?
Ovviamente vorrei evitare di agire sulle impostazioni della tastiera del sistema per non creare problemi ad altre applicazioni

io suo un modo molto semplice

nell’evento CellLostFocus eseguo un format del val della cella

es:
se nella cella hai scritto 123.45

nell’evento scrivo
me.cell(row, column) = format(val(me.cell(row, column)), “-###,###,###.00”)

a questo punto la cella avr come valore 123,45

fai cos … prendi la prima cosa che trovi … qualsiasi oggetto che ha al suo interno l’evento ‘keydown’
nel codice scrivi msgbox(str(asc(key))) cos vedi che cavolo di codice ha …
poi quando hai trovato il codice del tastierino numerico che corrisponde al punto ( guarda che su pc un codice, su linux un’altro, su mac un’altro ancora… mettiamo caso i codici sono 65444 per mac, 125 per windows e 123 per linux

Nell’evento keydown cancelli tutto e scrivi :

select case asc(key)
case 65444, 125, 123
me.text = me.text + “,”
return false
case else
return true
end select

in pratica se digiti il ‘.’ ma solo quello del tastierino numerico inserisce la virgola,
se digiti invece qualsiasi altra cosa non fa nessuna altra azione.

Ciao.

Non funziona:
innanzitutto il codice asc del punto del tastierino e della tastiera lo stesso, su pc mi da il 46
ma comunque
se nel codice inserisco nell’istruzione case il 46
qualsiasi tasto io prema non esce niente a meno che non prema il punto. in quel caso mi batte un punto prima del cursore e una virgola alla fine della stringa

non è proprio quello che chiedevo ma tutto sommato risolve il problema
grazie

Metodo Keyboard.AsyncKeyDown usato nell’evento KeyDown

Consiglierei di memorizzare il valore sempre con il punto (double compatibile) e visualizzarlo con il format (locale e quindi da noi con la , )

select case asc(key)
case 65444, 125, 123
me.text = me.text + “,”
return true
case else
return false
end select

inverti i return true con return false …

Buongiorno a tutti,

mi inserisco nella conversazione, mi piace il metodo di Massimiliano, ma se avessi un WebTextField dove come evento posso gestire un keypressed e vedendo l’help di xojo non ho a disposizione il keyevent della virgola.
Mi attengo al metodo di Antonio in questo caso?
io per ora nell’evento lostfocus ho messo : TextField9.Text=ReplaceAll(TextField9.Text,".",",")
non sar molto elegante ma pare funzionare.

Un saluto e sempre grazie
Enrico

Tieni conto che alcuni browser, se imposti il campo come numerico, non permettono l’uso di un separatore decimale errato (in base alla lingua che considerano di utilizzare)
Per semplificare il problema ti conviene utilizzare metodi indipendenti, ovvero memorizzare i numeri con il punto e non con la virgola, e usare, ad esempio totext con richiamando la locale dell’utente per mostrarli, in lettura fai la replace usando il separatore della locale dell’utente e trasformandolo in quello standard (ovvero il punto)

Sembra più complicato, ma una volta definita una sottoclasse per i campi numerici, non ci pensi più.