Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Vb.net problema do o while
martedì 20 marzo 2007 - 23.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
seven.7
Profilo
| Junior Member
127
messaggi | Data Invio:
mar 20 mar 2007 - 23:23
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
668
messaggi | Data Invio:
mer 21 mar 2007 - 09:47
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
127
messaggi | Data Invio:
mer 21 mar 2007 - 15:45
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 .... :-(
Torna su
Stanze Forum
Elenco Threads
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 !