Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo validità Input

Ciao a tutti,
come vi comportate ad esempio se dovete controllare il contenuto di una
textbox se č fra quelli desiderati?
Il classico campo Si/No (S/N) lo controllo cosě:
txt.text=ucase(txt.text)
if txt.text<>"S" AND txt.text<>"N" then
	txt.text=""
endif
oppure 
txt.text=ucase(txt.text)
if INSTR("SN",txt.text)=0 then
	txt.text=""
endif
Ma per controllare se un campo ad esempio č 10 o 20, oppure PIPPO o PLUTO.
Avevo pensato a una cosa del genere
Mas se metto AllowValue definito come: <AllowValue() as String> non mi
funziona.
*****************************************************************************
Public Function okInput(inValue As String, AllowValue As Variant) As
Boolean
Dim i As Integer
Dim bFind As Boolean
    bFind = False
    i = LBound(AllowValue)
    Do Until bFind Or i > UBound(AllowValue)
      If inValue = AllowValue(i) Then
        bFind = True
      End If
      i = i + 1
    Loop
 
    okInput = bFind
End Function
*****************************************************************************
Da richiamare con
okInput ("PIPPO", array("IIPP","PLUTO", "PIPPO"))
*****************************************************************************
-- 
DBMS Firebird
VB6 + Ado


****************************************************************************
*
Altra possibilità è usare Paramarray:
Public Function okInput(inValue As String, Paramarray AllowValue As Variant)
As Boolean
L'implementazione è identica a quella che hai postato, ma nella chiamata ti
risparmi la funzione Array:
    okInput ("PIPPO", "IIPP","PLUTO", "PIPPO")
Bye
Raf

     okInput ("PIPPO", "IIPP","PLUTO", "PIPPO")
Anche se non mi piace usare i variant, credo che non darà problemi in
questo modo.
Tnx


 dall'utente
Ciai ragion!!
Anche Split restituisce un Variant, anche se a differenza di Array contiene
un array di stringhe e non di variant...
Però se dichiari una variabile di appoggio, non dà errore:
Dim AllowValues() As String
    AllowValues = Split("IIPP,PLUTO,PIPPO",",")
     okInput ("PIPPO", AllowValues)
Immaginavo (male) che avrebbe funzionato anche direttamente.
Ciao
Raf

 Immaginavo (male) che avrebbe funzionato anche direttamente.
Tnx, la ParamArray comunque funge bene.
Ora vorrei fare un'altra cosa.
Dato che questa funzione la richiamerò solitamente da TextBox volevo
aggiungere un parametro per fare l'ucase (e me lo setti sulla txt
chiamante).
Immagino che in questo caso devo passare per forza la textbox come
parametro e non <inValue as String>, ma pregiudicandomi la possibilità di
usarla per qualsiasi comparazione.
Io farei l'ucase esterno, tanto sono 5 lettere di codice :)
Infatti così non funge:
If Not okInput(txtBlocc(Index).Text, True, "S", "N") Then
	txtBlocc(Index).Text=""
End If
Public Function okInput(inValue As String, bSetUcase As Boolean, ParamArray
AllowValue() As Variant) As Boolean
...
	If bSetUcase Then inValue = UCase(inValue)
...
end function



Non fasciarti la testa etc. etc.
Basta solo che sostituisci questo test:
      If inValue = AllowValue(i) Then
con
      If StrComp(inValue, AllowValue(i), vbTextCompare) = 0 Then
e a questo punto il confronto è case-insensitive, così ti risparmi l'UCase e
tutto il resto.
Se specifichi vbBinaryCompare, ovviamente il test torna ad essere
case-sensitive.
Bye
Raf

 case-sensitive.
Sisi questo si, a me serviva per settare automaticamente le maiuscole su
quelle txt.
Cioè scrivo "s" e controllo se S/N, in ogni caso all'uscita della routine
me lo setterebbe maiuscolo.
Ma lo farò (come sempre fino ad ora) esterno.
Grazie
