Newsgroup: it.comp.lang.visual-basic
Titolo: Ottimizzare una funzione

Avendo un po di tempo mi sto riorganizzando gli snippets di codice e tutte
le varie routine che avevo scritto a loro tempo, scorrendole mi sono
imbattuto in NextTabs e PrevTabs
Sono 2 funzioni che restituiscono rispettivamente il controllo precedente e
successivo secondo l'ordine del tabindex.
Le ho usate pochissimo perche' non mi piaceva il fatto di scorrere tutti i
controlli del form , ora mi chiedevo se esisteva una qualche strada
alternativa per fare lo stesso.
Vi pasto il codice  :
'----------------------
Public Function NextTabs(ByRef curForm As Form, ByRef Obj1 As Control) As
Control
    'cerco il prossimo controllo trai tabstop e lo restituisco altrimenti
restituisco il passato
    Set NextTabs = Obj1 ' se non trova nulla resta sullo stesso ogetto
    Dim Ctl As Control
    For Each Ctl In curForm.Controls
        If (TypeOf Ctl Is CommandButton) Or (TypeOf Ctl Is TextBox) Then
            If (Ctl.TabIndex = Obj1.TabIndex + 1) And (Ctl.TabStop) Then
                Set NextTabs = Ctl
                Exit Function
            End If
        End If
    Next
End Function
'----------------------
In pratica scrollo tutti i controlli che mi interessano (di solito button e
textbox) valuto il tabstop e tabindex e se esiste restituisco il successivo
altrimenti restituisco il controllo passato.
Any idea per ottimizzarlo ? Ora che ci penso sarebbe molto utile nelle
classiche form con multi textbox (es: la finestra di un dettaglio articolo)
e mi dispiacerebbe trasharlo :(
-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 Any idea per ottimizzarlo ? 
Secondo me era già veloce prima (non credo ci siano form con migliaia di
controlli), ad ogni modo, a quanto ne so l'unica istruzione lenta è
l'operatore "IS".
Pertanto ho semplicemente girato gli if in modo che tale operatore venga
chiamato al massimo due volte.
Verifica magari che non abbia perso la funzionalità...
Public Function NextTabsNew(ByRef curForm As Form, ByRef Obj1 As Control)
As Control
'cerco il prossimo controllo trai tabstop e lo restituisco altrimenti
'restituisco il passato
Dim lngTI As Long ' tabindex + 1
Dim Ctl As Control
Set NextTabsNew = Obj1 ' se non trova nulla resta sullo stesso ogetto
lngTI = Obj1.TabIndex + 1
For Each Ctl In curForm.Controls
    If (Ctl.TabIndex = lngTI) Then
        If Ctl.TabStop Then
            ' qui viene eseguito solo una volta
            If (TypeOf Ctl Is CommandButton) Or (TypeOf Ctl Is TextBox)
Then
                Set NextTabsNew = Ctl
                Exit Function
            Else
                ' ho trovato il next ma non è del tipo giusto
                Exit Function
            End If
        Else
            ' ho trovato il next ma non ha tabstop
            Exit Function
        End If
    End If
Next
End Function
' termoPilucco non è un istruzione
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

     '        Exit Function
poi devo verificare che le istruzioni tipo
If (Ctl.TabIndex = lngTI) Then
non generino errori ove non sia presente.
Cmq grazie !
-- 
-Gigio@Work(?)-

"termoPilucco" <te...@Piluc.co> ha scritto nel messaggio
news:cboo07$sv3$1...@news.newsland.it...

Ok...termopilucco non è un'istruzione...
Ma devo aver fatto ancora una cazzata?
Ho postato su questo argomento, Fuori da questo argomento.
Sono proprio da eliminare? Auto attivo l'istruzione Kill "Sossio.Lbn" ??
ecco cosa chiedevo:
studiando sui vostri post, ne ho letto uno che mi ha dato una goduria
immensa: è quello come da titolo
riportato in calce. La funzione trascritta, prevede il passaggio del focus
al controllo successivo o precedente
senza la rottura di fissare eventi keydown per ogni controllo.
Tuttavia, non riesco a capirne l'uso.
Chiederei:
Va usata all'interno del modulo?
Va inserita in un modulo bas?
Quale evento la deve richiamare?
 quali argomenti dovrei aggiungere alla chiamata alla funzione?
Es...
 NextTabsNew (...???)
Grazie a chi l'ha postata e grazie a chi risponde.
Sossio.

 Any idea per ottimizzarlo?
Set NextTabs = Obj1
mettilo *dopo* il ciclo For, in modo che venga eseguito solo quando serve.
Per il resto mi sembra gia' abbastanza ottimizzato, a parte quell'Or e
quell'And che come sappiamo in VB non sono ottimizzati di loro...
probabilmente meglio una serie di If ... Then ... Else.
Just my 2 €cent,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 NextTabsNew (...???)
set miocontrollo=NextTabsNew(me,text1)
oppure
msgbox NextTabsNew(me,text1).name
termoPilucco

 termoPilucco