Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB 2010 win form] Dubbio su Try.. cath..

    Ciao,

    Vorei porre un controllo su un dato inserito usando la sintassi try cath, ma eseguendo questo codice anche inserendo un numero valido (ad esempio 5) mi da la stessa eccezione: "cast non valido dalla stringa al tipo byte". Pensando che fosse un problema di conversione (visto che di default il text box è una stringa) ho provato con la conversione ma niente. Il controllo sullo zero funziona, ma nel caso si cancelasse il numero appena inserito, il programma va in eccezione; allora ho inserito il select case per forzare il campo dell'oggetto a 1 nel caso si imettese una stringa "".. ma niente. Dove è che sbaglio dannazione

    codice:
     Private Sub sale_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles input_sale.TextChanged
    
    
            'controllo che sale abbia un valore valido
            Try
                sale = System.Convert.ToByte(input_sale.Text)
                Select Case sale
                    Case Is = 0
                        MsgBox("che hai zero sale.. imbecille")
                    Case Is = ""
                        sale = 1
                        input_sale.Text = 1
                End Select
            Catch ex As Exception
                MsgBox("immetti un valore valido cosi andiamo avanti. Errore: " & ex.Message)
            End Try
    
    
    
        End Sub

  2. #2
    Ma la variabile sale di che tipo l'hai dichiarata?
    Chi non cerca trova.

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Premetto che select/case non lo so usare...
    Penso che gestisci male l' evento TextChanged e il controllo sul testo che viene verificato ad ogni modifica della textbox, dovresti provvedere ad azzerare il testo dopo le msgbox, inoltre byte ha il limite di 255.
    Con il codice sotto sembra funzionare...:
    codice:
     Private Sub TextBox1_TextChanged() Handles TextBox1.TextChanged
            If TextBox1.Text = "" Then
                Return
            End If
            If TextBox1.Text = "0" Then
                MessageBox.Show("che hai zero sale.. imbecille", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                TextBox1.Text = ""
                Return
            End If
            Try
                sale = CByte(TextBox1.Text)
            Catch ex As InvalidCastException
                MsgBox("immetti un valore valido cosi andiamo avanti." & vbCrLf & "Errore:" & _
                      ex.Message)
                TextBox1.Text = ""
                Return
            Catch ex As OverflowException
                MsgBox("Valore non consentito. Massimo 255." & vbCrLf & "Errore:" & _
                       ex.Message)
                TextBox1.Text = ""
                Return
            Catch ex As Exception
                MsgBox("Errore non previsto:" & ex.Message)
                TextBox1.Text = ""
                Return
            End Try
        End Sub
    NB: il codice "& vbCrLf & "Errore:" & ex.Message" una volta che conosci l' errore e lo descrivi nel testo della msgbox si può tralasciare. Io lo uso solo per identificare l' errore è immettere un testo pertinente nella msgbox tipo l' ultimo Catch.
    ciao

  4. #4
    Una tecnica più coincisa, ammesso che la variabile sale sia di tipo Byte:
    codice:
        Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
            If Byte.TryParse(TextBox1.Text, sale) Then
                If sale < 1 Then
                    MsgBox("Il valore deve essere > 0")
                    e.Cancel = True
                End If
            Else
                MsgBox("Valore non corretto")
                e.Cancel = True
            End If
        End Sub
    La verifica del dato l'ho fatta con l'evento Validating, se vedo che l'utente ha inserito un valore non valido posso impedire l'uscita dal campo (e.Cancel = True).
    Chi non cerca trova.

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da tas
    Una tecnica più coincisa, ammesso che la variabile sale sia di tipo Byte:
    codice:
        Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
            If Byte.TryParse(TextBox1.Text, sale) Then
                If sale < 1 Then
                    MsgBox("Il valore deve essere > 0")
                    e.Cancel = True
                End If
            Else
                MsgBox("Valore non corretto")
                e.Cancel = True
            End If
        End Sub
    La verifica del dato l'ho fatta con l'evento Validating, se vedo che l'utente ha inserito un valore non valido posso impedire l'uscita dal campo (e.Cancel = True).
    Bello!!!
    Alcune domande:
    l' evento TextBox1.Validating cosa lo fa partire?
    posso usarlo per interrompere un ciclo?

  6. #6
    Grazie Ragazzi,

    acendo un mix delle due soluzioni proposte ho ottenuto questo:

    codice:
     Private Sub sale_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles input_sale.TextChanged
    
    
            'controllo che sale abbia un valore valido
            If input_sale.Text = "" Then
                Return
            End If
    
    
            If Byte.TryParse(input_sale.Text, sale) Then
                If sale < 1 Then
                    MsgBox("Il valore deve essere > 0")
                    'e. = True
                End If
            Else
                MsgBox("Valore non corretto")
                'e.Cancel = True
            End If
    
        End Sub
    Una domanda (perchè tryparse ancora non l'ho studiato), ma cosa fa esattamente quel return li? Rimanda in attesa di nuovo dato?

    Grazie ancora!

    PS: Per Tas, si scusa 'sale' era byte.

    PPS: Sempre per Tas, il comando e.cancel non va!

  7. #7
    e.Cancel è relativo all'evento Validating.
    Chi non cerca trova.

  8. #8
    Originariamente inviato da tas
    e.Cancel è relativo all'evento Validating.
    scusa, ho capito solo ora.

  9. #9
    Originariamente inviato da Vinsent
    Bello!!!
    Alcune domande:
    l' evento TextBox1.Validating cosa lo fa partire?
    posso usarlo per interrompere un ciclo?
    Qui trovi una spiegazione dell'evento:
    http://msdn.microsoft.com/en-us/libr...alidating.aspx

    Cosa intendi per "interrompere un ciclo"?
    Chi non cerca trova.

  10. #10
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    x eternauta
    return interrompe l' esecuzione del codice che segue, dovrebbe essere l' equivalente di exit sub, sinceramente non conosco le differenze...

    x tas
    scusa... , domande stupide le mie:
    1 l' evento posso farlo partire o richiamare quando voglio io
    2 devo studiarmi come interrompere un ciclo (for/to/next) quando si vereficano determinate condizioni, in questo caso se e.cancel è true o false

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.