Newsgroup: it.comp.appl.access
Titolo: Controllo Key_Press digitazione ZERO

Mi perdo in un BICCHIERE di VINO....!
Devo controllare che la digitazione in una TXT_BOX sia
esclusivamente NUMERICA, e fin quì tutto OK, controllo
su evento KEY_PRESS il valore ASCII ecc.....!
Il mio problema è non accettare 0 come prima CIFRA.
In pratica devo poter digitare 10, ma non 01......!!!
E' necessario il controllo preventivo, non a posteriori...!!
GRAZIE
Ciao Alex.
--
@Alex
ik2...@libero.it
http://digilander.iol.it/ik2zok

 E' necessario il controllo preventivo, non a posteriori...!!
Mah...
Antonio

 ha scritto nel messaggio
news:UQSA9.30831$Zn2.8...@twister1.libero.it...

O ho fatto male il compito ho non funzia.....!!!
Se controllo Len(TextBox) su evento Key_Press c'è un problema:
supponi nella TxtBox ci sia scritto 2, io provo a sostituire il 2 con 0.
L'evento  in questione legge Len=1 e fin quì funziona, non accetta 0.
Ora viene il bello perchè al 2° inserimento, (es 2+0) Len è ancora=1
poichè non  ha ancora convalidato il 2° carattere......!!!!
Mi sono perso...???
Ciao Antonio.
@Alex.

 poichè non  ha ancora convalidato il 2° carattere......!!!!
Hai ragione...
E ora che ci penso mi pare che a suo tempo affrontai questo problema e mi sa
che non l'ho più risolto, almeno non ricordo come...
Senti, ma perchè fare il controllo su ciascun carattere?!?
Ma fallo alla fine, no?
Se non va, cancelli tutto e gli ripiazzi il focus lì dentro!!!
Antonio


Ma se invece di fare il controllo solo della LEN() = 1 lo fai anche sulla
LEN() = 0 non è meglio ??? Magari unitamente ad un controllo con la funzione
LEFT() ...
Ciao
Roberto Marini


probabilmente non ti piace ;-)
su afterupdate del controllo
TxtBox = clng(TxtBox)
-- 
Federico
----------------------------------
Rimuovi paperino. per e-mail
----------------------------------
Tutte le richieste che arrivano
in privato, vengono cestinate.
----------------------------------
Sito Comune di it.comp.appl.access
http://www.sitocomune.com
mailto:
webm...@sitocomune.com
----------------------------------

 Antonio
Ma dai, da quando in quà il cliente si accontenta...???
Ho pensato tanto, e tanto, ma il fatto è che fintanto che
non esegui l'UPDATE della TXT il valore LEN(...) è sempre
lo stesso dell'inizio....!!!
Grazie uguale, pensavo di essere diventato LENTO tutto in un colpo..!
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Roberto Marini
Hai provato a farlo...???
Durante la digitazione del testo a meno di non salvare
le varie lettere che hai premuto in un'array(non lo farň mai...!)
non c'č modo di recuperare il contenuto della TEXT_BOX fintanto
che non hai eseguito l'UPDATE del controllo stesso.
Pertanto nč Len(..) nč Left$(...) restituiscono un dato affidabile..!


 TxtBox = clng(TxtBox)
A me sinceramente piace, ma il "cliente" preferisce farmi impazzire...!
Scherzi a parte credo non si possa fare un controllo se non dopo
l'aggiornamento.
Ciao Federico....!


 Ma dai, da quando in quà il cliente si accontenta...???
Beh, questo è esagerato!
Posso capire se dici che viene compilata tutta la form e solo alla fine
viene fatto il controllo validazione, ma normalmente tutti i programmi
controllano alla fine dell'inserimento di tutta una casella!!
Antonio

 Antonio
Questo è un caso veramente particolare, senza spiegare
tutti i dettagli tecnici.....!
Solitamente concordo con te....!
Ciao.



Sorry alex-ictuzoc 
  ma mettere un flagghino a livello di modulo form che metti a true
  quando ti arriva il primo carattere "bono"?
  Certo c'e' sempre il problema di controllare i tasti di direzione
  che potrebbe complicare alquanto la cosa.
--
a.cara


stavo pensando a qualcosa di simile che pero' conta i caratteri in
modo da generalizzarlo e poter gestire anche il numero di caratteri
inseriti.
naturalmente, bisogna gestire tutti gli ascii non stampabili, per
azzerare il contatore.


 @Alex
La lunghezza della proprietà Text di un controllo cambia mano a mano che
digiti il dato, quindi, se la tua text_box si chiama Pippo, a fronte
dell'evento "Su modifica" di Pippo genera il seguente codice VBA:
Private Sub Pippo_Change()
If Len(Me.Pippo.Text) <> 0 Then
    If Len(Me.Pippo.Text) = 1 And Me.Pippo.Text = 0 Then
        MsgBox "Non puoi digitare uno zero"
        Me.Pippo.Undo
    End If
End If
End Sub
Fammi sapere se funziona.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 azzerare il contatore.
Beh, per complicarmi la vita potrei realizzare un'array che
incremento ad ogni KeyPress, in fondo non č complicato...! ;-)
Alessandro, non mi storpiare........!!!
Ciao CARO....!


 Ciao Federico....!
ho fatto qualche prova, dacci un'occhiata
forse ti viene in mente qualcosa.
il problema e' che ci sono troppe cose da gestire,
ad esempio:
- si incasina se uno seleziona il testo inserito e lo cancella
- permette l'inserimento dello zero iniziale se uno lo inserisce dopo
aver scritto altro
- ...
Dim iCharCount As Integer
Private Sub Testo1_GotFocus()
    iCharCount = Len(Nz(Me.Testo1, ""))
End Sub
Private Sub Testo1_KeyPress(KeyAscii As Integer)
    iCharCount = iCharCount + 1
    KeyAscii = f_chkAscii(KeyAscii, Me.Testo1 & Chr(KeyAscii))
End Sub
Function f_chkAscii(KeyAscii, String2 As String)
     'solo numeri
     If InStr(1, "0123456789", Chr(KeyAscii), vbTextCompare) > 0 Then
	'se il primo e' zero
        If iCharCount = 1 And KeyAscii = 48 Then
            iCharCount = iCharCount - 1
            KeyAscii = 0
        Else
	    'massimo 10 car.
            If iCharCount > 10 Then
                iCharCount = iCharCount - 1
                KeyAscii = 0
            End If
        End If
        f_chkAscii = KeyAscii
     'backspace
     ElseIf KeyAscii = 8 Then
        iCharCount = iCharCount - 2
        f_chkAscii = 8
     Else
        iCharCount = iCharCount - 1
        f_chkAscii = 0
    End If
End Function
Private Sub Testo1_LostFocus()
    iCharCount = 0
End Sub


 Ciao Federico....!
prova quest'altra:
gestisci il keypress normalmente per accettare i soli numeri
poi gestisci l'evento OnChange per disabilitare lo zero iniziale
Private Sub Testo4_Change()
    If Nz(Me.Testo4.Text, "") = "" Then Exit Sub
    If Left(Me.Testo4.Text, 1) = 0 Then Me.Testo4.Text =
Mid(Me.Testo4.Text, 2)
End Sub
un po accrocchiato, pero' sembra funzionare


 Roberto
Ciao Roberto...!
OK....!
Fantastico, pare funzionare benone.......!!!
Grazie.

 Federico
Siamo a quota 2, perfetta, come la soluzione di ROBERTO va che è una
meraviglia...!!
Grazie.
@Alex.


Pardon, non avevo proprio visto questo tuo msg.
-- 
Federico
----------------------------------
Rimuovi paperino. per e-mail
----------------------------------
Tutte le richieste che arrivano
in privato, vengono cestinate.
----------------------------------
Sito Comune di it.comp.appl.access
http://www.sitocomune.com
mailto:
webm...@sitocomune.com
----------------------------------


oops,
non avevo visto il msg di Roberto, che naturalmente e' piu' elegante.


 non avevo visto il msg di Roberto, che naturalmente e' piu' elegante.
Si, confermo per l'eleganza, ma hanno 2 comportamenti differenti
sull'annullamento del carattere.....!
Io direi che entrambi sono ottimi.
Ciao Federico, ottimo l'aggiornamento del SITO...!


 Federico
Nessun problema, capita a tutti. :-)
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------