Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [ultimo passaggio] riavviare routine dalla routine stessa!
Forum - C# / VB.NET - [ultimo passaggio] riavviare routine dalla routine stessa!

Avatar
Shark (Normal User)
Rookie


Messaggi: 35
Iscritto: 12/06/2014

Segnala al moderatore
Postato alle 5:24
Mercoledì, 18/06/2014
public sub CPUgaming
           CPUplay = dstr.Next(1, 3)
        Select Case CPUplay
            Case 1
               if  label3.Visible =True then
                Else
                CPUgaming()                 <<---------- se la label è nascosta ripeti la sub da capo..
                End if
            Case 2
                        UGUALE MA CON LABEL SUCCESSIVA
                   end select
end sub

mi da, quando deve fare l'operazione "CPUgaming" :

Impossibile intercettare l'eccezione. Il programma in debug non può proseguire e le espressioni non possono essere valutate.
System.StackOverflowException


non ho trovato nulla su internet ne inglese ne italiano,
perfavore oltre ai link che sicuro mi arriveranno, scrivetemi il comando/procedura direttamente please, giuro i link li vado a vedere!

Ultima modifica effettuata da Shark il 18/06/2014 alle 5:25


Conosco bene il grande e possente Google, ma se chiedo qui è perchè non ho trovato nulla......
PM Quote
Avatar
mattia1481 (Member)
Pro


Messaggi: 84
Iscritto: 03/11/2008

Segnala al moderatore
Postato alle 7:39
Mercoledì, 18/06/2014
L'eccezione System.StackOverflowException si verifica poiché nella tua procedura viene a mancare la condizione che ne permette l'uscita, praticamente va in loop.


Mattia Riviera
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:37
Mercoledì, 18/06/2014
Il problema è che non ha senso, in questo caso, eseguire la funzione da sè stessa.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Shark (Normal User)
Rookie


Messaggi: 35
Iscritto: 12/06/2014

Segnala al moderatore
Postato alle 13:43
Mercoledì, 18/06/2014
perchè non ha senso? il numero di casi è gestito random, nel caso (come da esempio) il caso fosse 2,    e la label nascosta riparta da capo, dove magari fa 1, la label è visibile e ci fa su le sue operazioni...



Conosco bene il grande e possente Google, ma se chiedo qui è perchè non ho trovato nulla......
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:51
Mercoledì, 18/06/2014
Allora ... cerca di chiarire il problema più generale perché la chiamata ricorsiva di una funzione è utilizzata per scopi specifici e segue regole precise.

Non si applica a tutto e magari non a quello che vorresti fare tu.

Quindi, spiega il perché ti serve la ricorsione ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Shark (Normal User)
Rookie


Messaggi: 35
Iscritto: 12/06/2014

Segnala al moderatore
Postato alle 15:57
Mercoledì, 18/06/2014
ok allora, ci sono tot label visibili con dei valori all'interno,(che si nascondono e prendono valore zero se il numero all'interno è < 0)  il computer deve scegliere una label e sottrargli un valore random da uno a label.text.

io ho provato con il comando select case, dove in base a un numero random da uno al totale delle caselle visibili, fa:  SE la casella è visibile sottraile un numero da uno a label.text

volevo mettere appunto un else che nel caso in cui la label non sia visibile rifacesse partire la procedura sopra descritta...


Conosco bene il grande e possente Google, ma se chiedo qui è perchè non ho trovato nulla......
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:22
Mercoledì, 18/06/2014
E non si fa così !  Hai usato la ricorsione al posto di un ciclo (come pensavo) ... ed è un grave errore ...

All'interno della funzione devi usare un ciclo che ripeta quello che vuoi fare sulla label da cui esci solo se l'operazione è stata fatta su una label visibile.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Shark (Normal User)
Rookie


Messaggi: 35
Iscritto: 12/06/2014

Segnala al moderatore
Postato alle 20:04
Mercoledì, 18/06/2014
Grazie mille! ho risolto così!


Dim arrai As Integer()
            
arrai = New Integer (11) {a1, b1, c1, d1, k1, f1, g1, h1, i1, l1, m1, n1}
            
    For Each valore In arrai
                                                    
        if  label3.Visible =True then
            a1 -=(chgrnd.Next(1, a1+1))
            Label3.text = CStr(a1)
            If label3.text <= 0 Then
                label3.hide
                Label3.text = 0
                tot -=1
            End If
        exit For
        End if
              if  label4.Visible =True then
            b1 -=(chgrnd.Next(1, b1+1))
            Label4.text = CStr(b1)
            If label4.text <= 0 Then
                label4.hide
                Label4.text = 0
                tot -=1
            End If
        exit For
        End if
                
        If  label5.Visible = True Then
            c1 -=(chgrnd.Next(1, c1+1))
            Label5.text = CStr(c1)
            If label5.text <= 0 Then
                label5.hide
                label5.Text = 0
                tot -=1
            End If
        exit For
        End If


e così via fino all'ultima label

ultima quest, ma se volessi fare in modo che la la scelta della label su cui agire fosse casuale?


Conosco bene il grande e possente Google, ma se chiedo qui è perchè non ho trovato nulla......
PM Quote