Vb.net problema do o while

martedì 20 marzo 2007 - 23.23

seven.7 Profilo | Junior Member

Salve, ho un problema non indifferente... Ogni qualvolta inserisco un ciclo Do o While che sia il programma non parte più o meglio viene generato ma non parte (ho controllato Task Manager e il nome del programma c'è ma non si vede). Appena tolgo il ciclo il programma viene generato e parte normalmente. Perchè ho di questi problemi... Non è la prima volta che mi capita ed ho usato sia visual studio che visual basci express (quello che uso di +), altre volte ho cambiato strada ma stavolta voglio capire cos'è che non va...

Spiego un po' il codice: Questo comando serve a leggere un file che utilizzo come "contenitore di ultimo stato programma": ogni controllo checkbox, textbox ecc... viene ricordato in questo modo nel file di testo con la voce "nome controllo=stato/valore;"

Il motivo per il quale uso Do o While: i checkbox del programma all'evento checkedchanged eseguono una funzione che disattiva e attiva altri controlli allora quando viene letto il file di testo a seconda delle voci che legge per prima attiva e disattiva i controlli allora il risultato è che alcuni controlli (per la verità solo uno) non vengono ricordati alla prima lettura, infatti, devo eseguire più volte (2) la funzione per avere il reale stato ricordato.

Private Sub EitRicordaLeggi(ByVal c As Control)
Dim _c As Control
Dim _cb As CheckBox
Dim _ct As TextBox
Dim _cr As RadioButton
Dim _cl As Label
Dim vstato As Boolean 'verifica stato
Dim pi As Integer = 0 'posizione iniziale
Dim pf As Integer = 0 'posizione finale
Dim lu As Integer = 0 'lunghezza stato controllo
Dim st As String = "" 'stato controllo
pi = InStr(ricordo, Me.RicordaSet.Name.ToString) 'trova il nome del controllo nel testo
pi = ricordo.IndexOf("=", pi) + 1 'trova la prima posizione del char "=" partendo da pi Nota: +2 perchè il contatore parte da 0 e non deve essere considerato il char =
pf = ricordo.IndexOf(";", pi) + 2 'trova la prima posizione del char ";" partendo da pi
lu = pf - pi 'per differenza calcola la lunghezza
st = Mid(ricordo, pi, lu) 'prende i considerazione il valore del controllo
st = Mid(st, 2, lu - 2)
Me.RicordaSet.CheckState = statoCB(st) 'passo il valore alla funzione dedicata ai checkbox per il risultato
For Each _c In c.Controls
EitRicordaLeggi(_c)
If TypeOf _c Is CheckBox Then
_cb = DirectCast(_c, CheckBox) 'converti il controllo in un Checkbox e inseriscilo nella variabilie _cb
If InStr(ricordo, _cb.Name.ToString) > 0 Then 'se trovi il nome del controllo nel registro
pi = InStr(ricordo, _cb.Name.ToString) 'trova il nome del controllo nel testo
pi = ricordo.IndexOf("=", pi) + 1 'trova la prima posizione del char "=" partendo da pi Nota: +2 perchè il contatore parte da 0 e non deve essere considerato il char =
pf = ricordo.IndexOf(";", pi) + 2 'trova la prima posizione del char ";" partendo da pi
lu = pf - pi 'per differenza calcola la lunghezza
st = Mid(ricordo, pi, lu) 'prende i considerazione il valore del controllo
st = Mid(st, 2, lu - 2)
Do While _cb.CheckState.ToString <> statoCB(st).ToString
_cb.CheckState = statoCB(st)
Loop
..... resto del codice

alextyx Profilo | Expert

Il problema è in questo ciclo?:

Do While _cb.CheckState.ToString <> statoCB(st).ToString
_cb.CheckState = statoCB(st)
Loop


Non ho seguito il resto del codice, ma presumo che cicli continuamente perchè gli risulta sempre vera la condizione:
_cb.CheckState.ToString <> statoCB(st).ToString

Metti un breakpoint all'ingresso e segui il codice a step. Oppure metti un contatore incrementale e schizza fuori dal loop dopo 500 volte e vedi se il programma parte.

seven.7 Profilo | Junior Member

For i = 0 To 5 'Do While _cb.CheckState.ToString <> st.ToString
_cb.CheckState = statoCB(st) 'passo il valore alla funzione dedicata ai checkbox per il risultato
Next

questo funziona .... :-(
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5