Cioè tu intendi dire: estendere la capacità del Like di riconoscere ogni carattere dell'Unicode ?
Una cosa simile a questa ? :-X
Private s As String
Public Sub Form_Open()
s = "ali" & String.Chr(&1D160) & "baba"
End
Public Sub Button1_Click()
If s Like "*" & String.Chr(&1D160) & "ba*" Then
Print "Verificata corrispondenza !"
Endif
End
If key.Text Like "[^0-9.,-]" Then
Stop Event
Endif
.........
in teoria con questo dovrei essere sicuro che altri caratteri non vangano inseriti...
ma non è così
perchè sulla spiezazione (il popup) di like c'è scritto che funziona solo con gli UTF-8, accenna al componente gb.prce
ora dovrebbe essere comprensibile a tutti qual'è il problemino ;)
ora dovrebbe essere comprensibile a tutti qual'è il problemino
Io ancora no. :-\
Ho provato il tuo codice e premendo qualunque tasto sulla tastiera compreso fra 0 e 9, nonché la virgola, il punto ed il trattino del meno non viene passata la verifica. Cioè se io, ad esempio, metto:
Public Sub Form_KeyPress()
If key.Text Like "[^0-9.,-]" Then
Print "verifica"
Endif
End
e premo il tasto di un simbolo presente nel Pattern di Like, nella console non viene scritto niente.
Oppure tu intendi una verifica di Like, oltre relativa ad un tasto, anche relativa ad una qualunque stringa di caratteri ?
Obbiettivo :Essre sicuro che non vengano scritti altri caratteri.
Metti uno zero (a seconda del caso) nella tag del controllo, la routine di controllo nell'evento Change, se quello che hai combacia con la maschera che vuoi con il like allora e' ok, e inserisci il valore che hai sul momento nella tag ancora, se non lo e' ripeschi il valore della tag e lo riassegni al text del controllo.
Il controllo lo puoi fare con isnumber, aiutato da una prova precedente tipo
If TextBox1.text = "," Then
TextBox1.text = "0,"
Endif
Do While Left(TextBox1.text, 2) = "00"
TextBox1.text = Mid(TextBox1.text, 2)
Loop
Do While Left(TextBox1.text, 3) = "-00"
TextBox1.text = "-0" & Mid(TextBox1.text, 3)
Loop
'qui ci metti tutti i like che vuoi, che devono comprendere anche i numeri parziali ovviamente
dim procedi as boolean
if textbox1.text like cosi' o cosa' o pomi'
'con le regexp duro fatica, figurati a scriverne una a mente che prenda piu' casi
'in ogni caso puoi fare un ciclo: se tieni in valor in array che puoi richiamare a seconda del caso, definiti globali, puoi
'anche riusarli in tutto il programma
' i numeri accettabili se non mi sfugge qualcosa sono, mentre li scrivi, "-", "-0", "0,"
procedi=true
endif
if procedi=true then
TextBox1.tag = TextBox1.text
else
TextBox1.text = TextBox1.tag
endif
Ovviamente, qui c'e' il controllo con la virgola come separatore, ma devi controllare quale adopera il sistema dove lo usi, in una funzione all'inizio che lo metta in una variabile. Funziona anche per il copia incolla. Ricorda che e' un numero anche 1.0344e15, quindi se vuoi evitare la c controllo da fare. Alla fine, prima dei calcoli, devi vedere ancora se questi sono numeri, ma con una sola prova, giusto per vedere che non ci sia un numero incompleto, tipo -0.
Una versione semplificata e' questa, per i numeri non esponenziali: ben lungi dall'essere perfetta, sembra quasi funzionare, ma ovviamente intendi tutto come un suggerimento e non come una cosa da fare copia e incolla.
If TextBox1.text = "," Then
TextBox1.text = "0,"
Endif
Do While Left(TextBox1.text, 2) = "00"
TextBox1.text = Mid(TextBox1.text, 2)
Loop
Do While Left(TextBox1.text, 3) = "-00"
TextBox1.text = "-0" & Mid(TextBox1.text, 3)
Loop
If InStr(TextBox1.text, "e") Then
TextBox1.text = Replace(TextBox1.text, "e", "")
Endif
If IsNumber(TextBox1.text & "0") = False Then
TextBox1.text = TextBox1.tag
Endif
TextBox1.tag = TextBox1.text
If key.Text Like "[^0-9.,-]" Then
Stop Event
Endif
la differenza la capisci qui...
se gli dò "4" il like lo lascia passare (nel senso che non lo stoppa)
se gli dò "g" il like eseguendo la verifica vede che non è tra quelli consentiti e quindi lo stoppa
se gli dò "è" il like non lo accetta e non esegue neanche la verifica passando avanti e quindi il carattere non viene stoppato
si ma non capisco il collegamento con il like...
...questa tua discussione è un mistero assoluto. ;D
(http://misterorisolto.files.wordpress.com/2013/05/shadow_credit.gif)
Ad ogni modo, se elimino tutte le righe dell'intero condizionale IF (anche quelle interne):
Public Sub Form_KeyPress()
Print "verifica"
End
ovviamente ad ogni tasto premuto viene stampata in console la stringa stabilita.
in alternativa qualcosa che controlla se è un ASCII oppure appartiene ad un altro set...
qualcosa tipo
If not isascii(key.Text) Then
Stop Event
Endif
però cosi dovrei tralasciare alcuni caratteri, tipo le freccie etc...
in alternativa qualcosa che controlla se è un ASCII oppure appartiene ad un altro set...
però cosi dovrei tralasciare alcuni caratteri, tipo le freccie etc...
Rileggendo un po' tutta la discussione sono scoppiato a ridere :rotfl: ......perché non ho capito bene ancora con precisione cosa vuoi ! :rotfl: :rotfl:
:'(
Voglio tenere come base il mio esempio di prima, ossia questo:
Public Sub Form_KeyPress()
If ............. Then
Print "Scrivo in console"
Endif
End
Dunque:
* se vuoi che premendo un numero non venga eseguita l'istruzione all'interno dell'IF, allora va bene il suggerimento di pastrank (ovviamente la soluzione pastrankiana può essere utilizzata - in modo diverso - anche se vuoi che l'istruzione venga eseguita, poiché la funzione IsNumber è comunque relativa ai numeri);
* se vuoi che venga eseguita l'istruzione all'interno dell'IF, soltanto se si preme un tasto avente come simbolo una lettera dell'alfabeto, anche se accentata (quindi niente numeri ed altri simboli), allora puoi fare così:
Public Sub Form_KeyPress()
' In questo caso usiamo il "Select Case":
Select Case key.Text
Case "A" To "Z", "a" To "z", "ì", "è", "é", "ò", "à", "ù"
Print "Scrivo in console"
End Select
End
si il risultato è stato trovato con questa....
'' **filtro caratteri***
'' ***
'' da inserire in un keypress
'' ***
'' **ARGOMENTI:**
'' - stringa: il testo della text box da controllare
'' da inserire!!
Public Function Filtro(stringa As String)
If key.Text Like "[^0-9.,-]" Then
Stop Event
Endif
If Key.Text = "." Then
If ricerca(stringa, ".") = 1 Then
Stop Event
Endif
Endif
If Key.Text = "-" Then
If ricerca(stringa, "-") = 1 Then
Stop Event
Endif
Endif
If Key.Text = "," Then
If ricerca(stringa, ".") = 1 Then
Stop Event
Endif
Endif
If Not IsAscii(Key.Text) Then
Select Case Key.Text
Case Not ""
Stop Event
End Select
Endif
End
:danger: ma :danger:
ancora non ho capito come estendere il like
gambas lo permette ma non riesco a capire come
diciamo che è risolto a metà
:ciao:
come posso usare le informazioni contenute qui??
Attenzione! LIKE si occupa come solo dei caratteri ASCII. Per ricercare stringhe con il set di caratteri UTF-8, Usare la gb.pcre componenti.
Prova ad attivare innanzitutto il componente in questione: gb.pcre .
Poi, potresti studiarne classi, funzioni e proprietà magari iniziando così: :-\
Private p As New Regexp
Public Sub Form_Open()
With p
' qui richiami le risorse della classe ponendo un punto, come di consueto...
End With
End
:-X