Newsgroup: it.comp.lang.visual-basic
Titolo: si blocca

voglio visualizzare in un textbox tutte le combinazioni possibili di 4 cifre
(0000 - 0001 - ... - 9999)
finquando uso 3 cifre tutto OK
con quattro si blocca
non mi sembra di chiedere troppo
cosa sbaglio ?
grazie
--------------------------------------
Private Sub Command1_Click()
    Dim x, w, j, i As Integer
    'pulisco la textbox
    Text1.Text = ""
    'faccio 4 cicli annidiati
    'For x = 0 To 9
        For w = 0 To 9
            For j = 0 To 9
                For i = 0 To 9
                    'aggiorno la textbox
                    Text1.Text = Text1.Text & vbCrLf & "-" & x & "-" & w &
"-" & j & "-" & i
                Next i
            Next j
        Next w
    'Next x
End Sub

 cosa sbaglio ?
A mio parere niente (a parte quella cosa che a me fa rabbrividire di
concatenare Interi con Stringhe, ma che VB6 permette :-((( )
Non è che 'si blocca' significa che il pc ci mette molto?
Perchè finchè non ha finito tu ovviamente non vedi niente nella textbox, per
cui può sembrare piantato...
Alberto

 non mi sembra di chiedere troppo
Beh, non si blocca, è solo che dura un po' di più.
In ogni caso ho notato che la proprietà Text del TextBox non accetta più di
65535 caratteri (ho messo un Debug.Print Len(Text1.Text) e quindi la tua stringa
viene troncata.
A questo punto ti conviene usare un RichTextBox.
Un appunto:
Dim x, w, j, i As Integer
equivale a:
Dim x As Variant
Dim w As Variant
Dim j As Variant
Dim i As Integer
Quindi, se la tua intenzione è quella di dichiarare tutte e quattro le variabili
come Integer, devi scrivere:
Dim x As Integer, w As Integer, j As Integer, i As Integer
Ciao!
--
Esteban
Hosted by 
www.seber.it
(Remove nonspammare for reply)

 cui può sembrare piantato...
Eventualmente, dopo che hai modificato la proprietà Text di Text1, fai un bel
Text1.Refresh


 ha scritto nel messaggio
news:h8Uw8.12008$8D3.3...@news1.tin.it...


 Text1.Refresh
oppure un DoEvents

 cosa sbaglio ?
[SNIP]
Come ti hanno gia' spiegato, e' solo un blocco di codice lento... vediamo
come velocizzarlo:
- Quando dichiari le variabili su una stessa riga devi ripetere ogni volta
il tipo di dato, cosi' come hai scritto stai usando 3 variant e un integer
invece di 4 integer come vorresti.
- L'accesso al tipo di dato Long e' leggermente piu' veloce rispetto al tipo
Integer sui sistemi a 32bit e notevolmente piu' veloce del Variant (vedi
sopra), siccome usi semplicemente quattro contatori il consumo maggiore di
memoria e' irrilevante (miglioramento modesto, ma comunque...)
- Se devi fare riferimento molte volte ad una property di un controllo, e'
piu' performante dichiarare una variabile locale di tipo appropriato e
usarla come appoggio per le tue operazioni
combinando i tre suggerimenti il codice diventa quindi:
Dim x As Long, w As Long, j As Long, i As Long
Dim strTemp As String
Text1.Text = ""
strTemp = "" 'di fatto superfluo, ma non fa mai male...
For x = 0 To 9
    For w = 0 To 9
        For j = 0 To 9
            For i = 0 To 9
                'aggiorniamo la variabile temporanea
                strTemp = strTemp & vbCrLf & "-" & x & "-" & w _
                    & "-" & j & "-" & i
            Next i
        Next j
    Next w
Next x
'assegniamo il testo definitivo al TextBox
Text1.Text = strTemp
fin qui abbiamo visto qualche considerazione di carattere generale, che
migliora un po' la faccenda ma non in maniera definitiva... nel caso
particolare puoi pero' rivedere la logica della funzione ed evitare 4 cicli
innestati riducendo il tutto ad un unico ciclo, che oltre ad essere molto
piu' veloce si presta molto meglio ad essere adattato con valori diversi:
Dim x As Long
Dim strTemp As String
Text1.Text = ""
strTemp = ""
'10 ^ 4 - 1 = 9999... per avere le combinazioni a n cifre e'
'sufficiente modificare l'esponente di conseguenza
For x = 0 To 10 ^ 4 - 1
    'aggiorniamo la variabile temporanea, formattando il testo
    'per imitare il risultato originale
    strTemp = strTemp & vbCrLf & Format(x, "\-0\-0\-0\-0")
Next x
'assegniamo il testo definitivo al TextBox
Text1.Text = strTemp
Addesso dovresti notare un drastico miglioramento di prestazioni... rimane
il problema della lunghezza massima nel textBox ma di quello ti hanno gia'
parlato.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown