...oppure anche così: :-X
Public Sub Button1_Click()
Dim b As Boolean
b = CBool(InStr("alibaba", "i"))
' Vedo in console il risultato booleano:
Print b
End
ok ma non restituisce la posizione della prima "occorrenza"..
è in un change...
dovrebbe servire per var inserire il puntino una volta sola..
If (InStr(stringa, ".") ) And (Len(stringa) > 1) Then
lettera = "."
Else
lettera = ""
Endif
non va....
lo fa inserire più di una volta...(la lettera..)
Perdonami, non capisco.
"Lo fa"... chi ?
Puoi essere più dettagliato e preciso ?
Ad ogni modo a me il tuo codice, posto all'interno di una semplice Form_Open() funziona: :-\
Public Sub Form_Open()
Dim stringa As String = "ali.baba"
Dim lettera As String
If (InStr(stringa, ".")) And (Len(stringa) > 1) Then
lettera = "."
Else
lettera = ""
Endif
Print lettera
End
infatti servia proprio a quello...
allora spiego
ho la funzione
Public Function controllo(stringa As String) As String
Dim lettera As String
lettera = Right(stringa, 1)
If lettera <> "" Then
Select Case lettera
Case "0" To "9"
lettera = lettera
Case ","
If InStr(stringa, ",") = 1 And Len(stringa) > 1 Then
lettera = "."
Else
lettera = ""
Endif
Case "."
If (InStr(stringa, ".")) And (Len(stringa) > 1) Then
lettera = "."
Else
lettera = ""
Endif
Case "-"
If (Left(stringa, 1) = "-") And (Len(stringa) > 1) Then ''ricontrollare
lettera = ""
Else
lettera = "-"
Endif
Case Else
lettera = ""
End Select
stringa = Left(stringa, Len(stringa) - 1) & lettera
Endif
Return stringa
End
che uso
public sub text_change
text.text=controllo(text.text)
end
(credo che l'abbia scritta vuott..)
doveva servire a confermare che il testo inserito nella text sia veramente un float...
però la funzione non è completa...
Se non ho capito male, si vuole limitare l'input ai soli caratteri numerici dentro una TextBox.
Il controllo si risolve assai facilmente, facendo intervenire l'evento "KeyPress", al cui interno si può testare il singolo crt(carattere) digitato e scartare tutti i caratteri diversi dai numeri:
$Como = Key.Text
Select Case $Como
Case "a" to "z", "A" to "Z",".", ",", ecc.....
Stop Event
End Select
Attenzione perchè oltre ai crt alfanumerici, esistono anche i Key.Code corrisoppondenti ai tasti funnzione, ai tasti "Invio", "Tab",...
:ciao:
Oppure:
Public Sub Filtro()
If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
Stop Event
Else If Key.Text Like "." And InStr(text.Text, ".") Then
Stop Event
End If
End
Inserisce numeri e un solo punto (.)
Ps: da inserire nell'evento _KeyPress()
Oppure:
Public Sub Filtro()
If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
Stop Event
Else If Key.Text Like "." And InStr(text.Text, ".") Then
Stop Event
End If
End
Inserisce numeri e un solo punto (.)
Ps: da inserire nell'evento _KeyPress()
l'istruzione successiva alla if ... Else
Else If Key.Text Like "." And InStr(text.Text, ".") Then
Stop Event
mi sembra ridondante rispetto alla precedente, in quanto già la
If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
Stop Event
è sufficiente a trascurare il "."
Non vengono però trascurati tutti i crt digitati con CTRL+tasto-qualsiasi. Quindi bisogna estendere il controllo anche su combinazioni come quella appena indicata.
:ciao:
Public Function ricerca(testo As String, lettera As String) As Integer
Dim count, lef, righ, l As Integer
Dim lung As Integer = Len(testo)
Dim lett, par As String
count = 0
lef = 0
righ = lung
For l = 1 To lung
lef += 1
righ -= 1
par = Left(testo, lef)
lett = Right(par, righ)
If lett = lettera Then
count += 1
Endif
Next
Return count
End
perchè non funziona :hard: :hard: :hard: :hatecomputer: :hatecomputer: :hatecomputer:
comunque et voila!! ;D
Allora, se l'obiettivo è sapere quante volte è presente un dato carattere in una stringa, io farei così:
Public Function ricerca(testo As String, lettera As String) As Integer
Dim l, trovato As Integer
For l = 1 To Len(testo)
' Se il carattere controllato è uguale a quello che si sta cercando....
If Mid(testo, l, 1) = lettera Then
'...allora incrementa di un'unità il valore della variabile integer che tiene il conto:
Inc trovato
Endif
Next
Return trovato
End
bè da quello che hai scritto qualcosa hai capito ;D ;D ;D
apparte gli scherzi lo scopo finale era quello...
con l'evento keypress si può inserire solo quello che si può digitare (tipo la funzione di vuott che ho pugglicato quache giorno fa...) escludendo il resto??
nella tua funzione
$Como = Key.Text
Select Case $Como
Case "a" to "z", "A" to "Z",".", ",", ecc.....
Stop Event
End Select
$como è una variabile??
ora provo a modificarla un pò..
con questa ho quello che voglio ma no trascura acuni caratteri (èòàùì....) ma la funzione dice "tutto ciò che non è nell'intervallo" (ca.) e perciò dovrebbero essere presenti anche quei caratteri...
Public Function Filtro()
If key.Text Like "[^0-9.,-]" Then
Stop Event
Endif
End
ora la domanda si compone da sola...
come faccio a escludere anche quei caratteri???
$como è una variabile??
Si, è una variabile String
con questa ho quello che voglio ma no trascura acuni caratteri (èòàùì....) ma la funzione dice "tutto ciò che non è nell'intervallo" (ca.) e perciò dovrebbero essere presenti anche quei caratteri...
Public Function Filtro()
If key.Text Like "[^0-9.,-]" Then
Stop Event
Endif
End
ora la domanda si compone da sola...
come faccio a escludere anche quei caratteri???
l'istruzione if dell'esempio fornito da 9Bit trascura anche i crt "à, é, è, ì, ò, ù", ma trascura anche tutti i crt alfabetici, quindi puoi benissimo utilizzare solamente quella.Non hai perciò di usare la mia
$Como = Key.Text
Select Case $Como
Case "a" to "z", "A" to "Z",".", ",", ecc.....
Stop Event
End Select
Devi però testare anche i tasti come [Canc], [Tab], [Shift+Tab], [Backspace], [freccia indietro], [freccia avanti], perchè non sono sicuro che non vengano trascurati.
:ciao:
Public Function Filtro(stringa As String)
If key.Text Like "[^0-9.,-]" Then
Stop Event
Endif
If Key.Text = "." Then
If (ricerca(stringa, ".") = 1 And Len(stringa) >= 1) Then
Stop Event
Endif
Endif
If Key.Text = "è" Or Key.Text = "ò" Or Key.Text = "à" Or Key.Text = "ù" Then
Stop Event
Endif
End
ok manca solo la trsformazione della "," in puntino e qualche carattere
bene si fanno progressi ;D ;D
La tua Function Filtro è richiamata nell'evento KeyPress?
Non capisco la seguente istruzione
If (ricerca(stringa, ".") = 1 And Len(stringa) >= 1) Then
puoi scriverla anche così: If ricerca(stringa, ".") = 1 And Len(stringa) >= 1 Then
Ma ricerca(stringa, ".") non funziona in quanto non ricerca non è riconosciuto da Gambas. Fai invece
dim ricerca as Integer
........................................
ricerca = instr(stringa,".")
if ricerca > 0 then
Stop Event
Endif
Inoltre, come ti ho già detto nel mio precedente post, l'istruzione:
If Key.Text = "è" Or Key.Text = "ò" Or Key.Text = "à" Or Key.Text = "ù" Then
non produce alcun effetto, perchè non verrà mai eseguita. il quanto quel lavoro è già egregiamente svolta dalla
If key.Text Like "[^0-9.,-]" Then
scusate....
ricerca è una mia funzione!!!
Public Function ricerca(testo As String, lettera As String) As Integer
Dim l, trovato As Integer
For l = 1 To Len(testo)
' Se il carattere controllato è uguale a quello che si sta cercando....
If Mid(testo, l, 1) = lettera Then
'...allora incrementa di un'unità il valore della variabile integer che tiene il conto:
Inc trovato
Endif
Next
Return trovato
End
si è chiamata in un evento keypress
Inoltre, come ti ho già detto nel mio precedente post, l'istruzione:
Codice:
If Key.Text = "è" Or Key.Text = "ò" Or Key.Text = "à" Or Key.Text = "ù" Then
non produce alcun effetto, perchè non verrà mai eseguita. il quanto quel lavoro è già egregiamente svolta dalla
Codice:
If key.Text Like "[^0-9.,-]" Then
no ti sbagli....
il like non accette stringe unicode!!!
Non capisco la seguente istruzione
Codice:
If (ricerca(stringa, ".") = 1 And Len(stringa) >= 1) Then
puoi scriverla anche così:
Codice:
If ricerca(stringa, ".") = 1 And Len(stringa) >= 1 Then
errore mio...
ho aggiunto qualcosina ma niente di che...
ecco dove sono arrivato
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 Not Left(stringa, 1) = "-" Then
Stop Event
Endif
Endif
Select Case Key.Text
Case "è", "é", "ò", "ç", "à", "°", "ù", "§", "£", "ì", "€"
Stop Event
End Select
End
manca solo la virgola e il meno che (per ora) non fa quello che voglio
cioè che si può inserire solo all'inizio e una volta sola
alcune istruzioni sono in un altra funzione che però va inserita nel change
un pò lunghetto....
come si fa a escluderli??
Per escluderli e' facile, ti basta memorizzare il valore originale della textbox da qualche parte, tipo variabili o la tag del controllo, e poi, nell'evento change(), controllare il testo con isnumber(), aggiungendo uno 0 alla fine nel caso ci sia un solo carattere e sia un meno.
If IsNumber(TextBox1.text & "0") = False Then
'oppure if latuafunzione(textbox1.text) = false then
TextBox1.text = textbox1.tag
Endif
textbox1.tag = TextBox1.text
Occhio che l'ho scritto senza provarlo. E attento comunque a tutte le implicazioni, tieni conto che le calcolatrici di solito usano il punto come separatore, il formato italiano la virgola, quello inglese il punto, ma vorrai pure copiarli i risultati, e se usi il punto sul programma su di un sistema italiano, copi il risultato, lo incolli su uno spreadsheet e viene visto come stringa, ti stressi la vita.
Ed e' per quello che prima di aggiungere funzionalita' e parlare di versioni dovevi fare una cosa, controllarla bene e poi potevi andare sicuro, ora devi cambiarne un sacco :rolleyes:
nooo scherzi :rotfl:
cambire non tanto...
dopo tutti i controlli vuoi che non sia un numero....
Non si sa mai, hai provato a copiarci lettere, numeri, frasi, libri? Ogni calcolo rifatto sugli estremi se ci sono limiti, etc etc? Non e' semplice semplice, per quello ti avvisavo: per dire, sai perche' avevo messo quel pezzetto di riga
if isnumber(TextBox1.text & "0") then
perche' se no isnumber() se inizi a scrivere "-" ti darebbe false.
La prima cosa, quando devi inserire dei dati, e' sempre fare in modo che siano in un formato di ingresso conosciuto, in questo caso un numero, ovvero prima di iniziare il calcolo devi essere sicuro di avere un numero. Allo stesso modo, dovessi leggere un file, prima ti dovresti assicurare che esista, che abbia i permessi per leggerlo, che contenga i dati nel formato che tu vuoi, e solo dopo leggerlo. Il vero cialtrone invece fa una funzione per leggere il file infarcita di try e basta.
Ah, nemmeno io sono il programmatore che fa tutto in modo perfetto, anzi, invecchiando peggioro continuamente :)