Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6]Funzione e setfocus

Salve mi capita di utilizzare piů volte questa routine all'interno di molti 
form del mio programma.
Private Sub txtcod1_LostFocus()
If txtcod1 > "999" Then
    MsgBox "Codice non corretto." & Chr(13) & _
    "Provare a reinserire il codice prima di continuare!", vbExclamation, 
"Attenzione"
    txtcod1.SetFocus
    Exit Sub
End If
End Sub
Avevo pensato di creare una funzione da inserire nel modulo che mi 
permettesse di utilizzare la stessa routine in tutti i form.
Avevo pensato a :
Public Function valoremassimo(casellatesto as variant)
If casellatesto > "999" Then
    MsgBox "Codice non corretto." & Chr(13) & _
    "Provare a reinserire il codice prima di continuare!", vbExclamation, 
"Attenzione"
    casellatesto.SetFocus
    Exit Function
End If
End Function
Perň ovviamente non mi permette di fare il setfocus perchč non considera 
casellatesto  un oggetto ma solo un valore.
Come posso far riconoscere la mia variabile come fosse una textbox?
Spero di essermi espresso bene.
Grazie

 Grazie
Riferisciti sempre alla proprietà ESPLICITA text in questo caso....!
Hai almeno 2 modi per farlo...!
1)Passare l'oggetto, queindi nel tuo caso TextBox
Public Function valoremassimo(casellatesto as TextBox)
 If casellatesto.text > "999" Then
     MsgBox "Codice non corretto." & Chr(13) & _
     "Provare a reinserire il codice prima di continuare!",
vbExclamation,
 "Attenzione"
     casellatesto.SetFocus
     Exit Function
 End If
End Function
2)Passare il Nome dell'Oggetto e farvi riferimento in modo tardivo
accedendo alla Collection Controls di Form
Public Function valoremassimo(casellatesto as string)
 If me.Controls(casellatesto).Text > "999" Then
     MsgBox "Codice non corretto." & Chr(13) & _
     "Provare a reinserire il codice prima di continuare!",
vbExclamation,
 "Attenzione"
     me.Controls(casellatesto).SetFocus
     Exit Function
 End If
End Function
Personalemente preferisco il 1°
@Alex

Ciao Alessandro
Grazie per la risposta, ho provato il primo metodo e aimè riscontro il 
seguente errore "Tipo non corrispondente"
per richiamare la funzione (che si trova all'interno di un modulo) scrivo
valoremassimo (txtcod1)
ho provato anche con
valoremassimo (cercamateria.txtcod1)
 cosa pensi possa essere?
Grazie ancora per il tuo aiuto.

 Grazie
Private Sub CheckTextVal(t As TextBox)
    If Val(t) > 999 Then
        MsgBox "valore non corretto"
        t.SelStart = 0
        t.SelLength = Len(t)
        t.SetFocus
    End If
End Sub
Private Sub Text1_LostFocus()
    CheckTextVal Text1
End Sub
ciao a. 

Davidec84 ha scritto:

Cos'è cercamateria...?
In ogni caso Andrea ti ha dato la Function finita come dovrebbe essere
con anche
l'esempio, tra le altre cose mi era sfuggito che dovendo confrontare un
numero è bene
prendere il VAL del riferimento, come in effetti ti ha fatto vedere...!
Ciao
@Alex

Cos'è cercamateria...?
un form?
davide, saro' noioso, ma i form non e' male se li chiami frmQualcheCosa, i 
command cmdGhePensiMi, i textbox txtMettiUnaMonetina, ecc.
non mi ricordo piu' dove ho messo l'elenco dei prefissi convenzionali, ma se 
ti serve lo cerco. cmq sono abbastanza ovvi: opt, lbl, chk... praticamente i 
codici fiscali degli oggetti.
cosi', fra l'altro, chi cerca di darti una mano ci capisce un po' di piu', 
ha ragione alessandro.
ciao, a. 

 ha scritto nel messaggio 
news:4v2qndF...@mid.individual.net...


 ha scritto nel messaggio 
news:1166809327.2...@h40g2000cwb.googlegroups.com...


 ha scritto nel messaggio 
news:458c5a36$0$4247$4faf...@reader1.news.tin.it...

Ciao,
@Alex ti ha suggerito la seguente procedura: dal menu inserisci scegli 
modulo e quindi copia ed incolla la sua funzione
-----
Public Function valoremassimo(casellatesto As TextBox)
 If Val(casellatesto.Text) > 999 Or Val(casellatesto.Text) <= 0 Then
     MsgBox "Occhio alla casella"
     casellatesto.Text = ""
     casellatesto.SetFocus
  End If
End Function
----
Nella tua form invece scrivi...
------
Private Sub txtcod1_GotFocus()
  'chiamata alla funzione alla quale passi il tuo testo
  valoremassimo txtcod1
End Sub
------
Ci siamo?

 cosa pensi possa essere?
Se usi le chiamate con
NomeFunzione (valore)
VB6 tenta il passaggio per valore della variabile, con i controlli succede 
che passa il valore della property predefinita (Text).
Quindi o usi
Call NomeFunzione(valore)
o
NomeFunzione valore
Ciao