Incuriosito dal thread di michelecali, dove ho scoperto ON ERROR GOTO/RESUME NEXT, ho fatto una (molto) veloce ricerca su internet dove ho superficialmente capito che:
1 è stato sostituito da TRY/CATCH
2 è stato mantenuto per motivi di compatibilità
3 è meglio usare TRY/CATCH
A scopo didattico, con il codice di test alla fine del post in cui genero un' eccezione sulla conversione da string a byte, ho cercato di fare le stesse cose usando i due metodi.
Penso che salti subito all' occhio che nella sub TRY_CATCH c' è molto più codice e vengono gestiste nel "particolare" solo le eccezioni della textbox1 mentre nella sub ON_ERROR le eccezioni possono essere gestite nel "particolare" per entrambe le textbox.
Quindi non mi spiego i tre punti sopra...mi stò perdendo qualcosa???
NB: portate pazienza, faccio tutt' altro mestiere che il programmatore, sono abbastanza autodidatta![]()
codice:Dim a As Byte Dim b As Byte Dim f As String Private Sub TRY_CATCH() Handles Button1.Click a = 0 b = 0 f = "" Try a = CByte(TextBox1.Text) Catch ex As OverflowException If MessageBox.Show("errore overflow" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub Else f = f & "errore: " & ex.Message & vbCrLf End If Catch ex As InvalidCastException If MessageBox.Show("errore testo" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub Else f = f & "errore: " & ex.Message & vbCrLf End If Catch ex As Exception f = f & "errore: " & ex.Message & vbCrLf End Try Try b = CByte(TextBox2.Text) Catch ex As Exception f = f & "errore: " & ex.Message & vbCrLf End Try MsgBox("ERRORI" & vbCrLf & f) End Sub Private Sub ON_ERROR() Handles Button2.Click a = 0 b = 0 f = "" On Error GoTo Errori a = CByte(TextBox1.Text) b = CByte(TextBox2.Text) On Error GoTo 0 MsgBox("ERRORI" & vbCrLf & f) Exit Sub Errori: If Err.Number = 6 Then If MessageBox.Show("errore overflow" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub End If End If If Err.Number = 13 Then If MessageBox.Show("errore testo" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub End If End If f = f & "errore N° " & Err.Number & ": " & Err.Description & vbCrLf Resume Next End Sub


Rispondi quotando
(almeno in VBA è così)
