Newsgroup: it.comp.lang.visual-basic
Titolo: Problema For...Next

Vorrei far apparire sul form una colonna di numeri decrescenti da
100 a 0 , step -10  e cioč  100 , 90, 80, 70, ecc.
ho scritto questo loop:
Private Sub Form_Paint ( )
Dim I As Integer
Dim J As Integer
   For I =700 To 7200 step 600
     For J =100 To 0 Step -10
        CurrentX = 200
        CurrentY = I
         Print  J
     Next J
   Next I
ho ottenuto una colonna di zeri .  Se lo sapete ,per favore ditemi : dove ho
sbagliato ?  Grazie.
Francesco

    Next I
Perchè così facendo esegui il ciclo interno (la stampe dei tuoi numeri da
100 a 0) sempre nello stesso punto.
Solo al termine del ciclo interno viene eseguito l'incremento I=I+600
Allora ripeti ancora il ciclo interno decrementando J da 100 a 0 nel nuovo
punto. Quindi i numeri li scrivi tutti e 10 ogni volta nello stesso punto.
Prova a modificare il tuo ciclo in questo modo:
Private Sub Form_Paint()
Dim J As Integer
     For J = 100 To 0 Step -10
        CurrentX = 200
        'Per ogni numero viene incrementata la Y (in modo crescente, non
decrescente come la J)
       CurrentY = (100 - J) * 50
         Print J
     Next J
End Sub
Alla prima iterazione CurrentY varrà:
(100-J)*50 = (100-100)*50 = 0
Alla seconda iterazione:
(100-J)*50=(100-90)*50=500
Alla terza iterazione:
(100-J)*50 = (100-80)*50 = 1000
Praticamente incrementi CurrentY di 500 alla volta.

 dove ho sbagliato?
controlla gl'indici. Stampi tutti i numeri di ogni sequenza nella
stessa posizione, è normale che resti visualizzato solo l'ultimo
numero. Dalla tua premessa mi pare di aver capito che volevi stampare
UNA sola colonna di numeri, quindi volevi tenere la X fissa (200) e la
Y variabile per stampare i numeri alla giusta quota, e il ciclo "a
rovescio" doveva servire perché il sistema di riferimento ha l'asse
rivolto verso il basso anziché l'alto come siamo abituati.
Se ho capito bene, ci sono diverse cose cha non funzionano nella
logica del tuo programma.
1) Perché il codice l'hai messo nell'evento _Paint? Se vuoi che quello
che stampi sul form sia permanente basta impostare la proprietà
AutoRedrow del form a True.
2) Di solito è meglio lasciare che i cicli con passo unitario, e fare
i calcoli all'interno, così vedi meglio quante iterazioni fai.
3) dato che fissi la coordinata, non c'è assolutamente bisogno di fare
il ciclo "a ritroso", puoi benissimo stampare da 0 a 100 anziche da
100 a 0, mi pare più naturale.
Suggerisco di correggerlo così:
Dim I As Integer
Dim J As Integer
   For I = 0 To 10
      CurrentX = 200
      CurrentY = 6700 - 600 * I
      Print 10 * I
   Next I
Ciao, Silv:o)

 ha scritto

dormo, ma direi che vedi gli zeri finali di i=100 i=90 ecc., con un
pastrocchio sulla prima cifra perche' j lo stampi sempre sullo stesso x,y.
prova a mettere un txt e 3 cmd:
Option Explicit
' sembra andare:
Private Sub Command1_Click()
    Dim i As Long, j As Long, s As String
    For i = 700 To 7300 Step 600 'a step 600 il 7200 non lo vedrai mai.
        For j = 100 To 0 Step -10
            s = "i= " & i & " - j =" & j
            Text1.Text = Text1.Text & vbCrLf & s
            Text1.SelStart = Len(Text1.Text)
            DoEvents
        Next j
    Next i
End Sub
' pastrocchi:
Private Sub Command2_Click()
    Dim i As Long, j As Long, s As String
    For i = 700 To 7300 Step 600
        For j = 100 To 0 Step -10
            s = "i= " & i & " - j =" & j
            CurrentX = 200
            CurrentY = i
            Print s
'            Print j
        Next j
    Next i
End Sub
' misure calate perche' volevo vedere tutto e il form era piccolo:
Private Sub Command3_Click()
    Dim i As Long, j As Long, s As String
    For i = 300 To 3000 Step 300
        For j = 100 To 0 Step -10
            s = "i= " & i & " - j =" & j
            CurrentX = 200
            CurrentY = i
            Print s
'            Print j
        Next j
    Next i
End Sub
prova a eseguire di seguito cmd2 e cmd3 per variazioni sul pastrocchio.
se guardi bene s in text1 (cmd1) capisci il punto.
hth, j.
--
www.sundaysw.com

 sbagliato ?
A scuola mi facevano mettere su carta tutti i flussi prima di scrivere
codice, in modo da verificarne la logica.
Ora lo faccio (purtroppo :)) solo per verivicare qualcosa che non riesco a
risolvere.
Non sarebbe una cattiva pratica.
Ciao

 sbagliato ?  Grazie.
L'errore sta nell'annidamento dei due For.
L'incremento della I per posizionare le Print
deve essere effettuato all'interno del "For J"
(eliminando il "For I..." ed incrementando a mano):
Private Sub Form_Paint ( )
Dim I As Integer
Dim J As Integer
I = 700
For J =100 To 0 Step -10
    CurrentX = 200
    CurrentY = I
    I = I + 600
    Print  J
Next J
--
Er Roscio.

 > 100 a 0 , step -10  e cioè  100 , 90, 80, 70, ecc.


"F. Grasselli" ha scritto nel messaggio
NO, ZANNA, NON FARLO !
Bye, G.

 100 a 0 , step -10  e cioè  100 , 90, 80, 70, ecc.
Non ho capito a che cosa serva ;-), comunque potresti fare cosi':
    Dim r As Integer, v As Integer
    For r = 1 To 10
        For v = 100 To 0 Step -10
            Print v; Chr$(9);  ' TAB
        Next v
        Print
    Next r
Se vuoi qualcosa di piu', spiegaci meglio cos'e' che intendi ottenere..
--
   Alex Palmese
---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/

 Per le proposte di risoluzione invece sei avaro.
I consigli ti insegnano qualcosa, se non vuoi imparare niente chiedi pure
agli altri.
-- End Of Trhead(Zanna) --
P.S.: Pap, contento?

 P.S.: Pap, contento?
:-)
Pap.FlameStopper = True

 ha scritto nel messaggio
news:XwOI8.95149$CN3.2...@news2.tin.it...
