Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Button3 As System.Windows.Forms.Button
    Friend WithEvents Button4 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button()
        Me.Button2 = New System.Windows.Forms.Button()
        Me.Button3 = New System.Windows.Forms.Button()
        Me.Button4 = New System.Windows.Forms.Button()
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(16, 24)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(104, 48)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Cause Unhandled System Exception"
        '
        'Button2
        '
        Me.Button2.Location = New System.Drawing.Point(16, 88)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(104, 48)
        Me.Button2.TabIndex = 1
        Me.Button2.Text = "Cause Handled System Exception"
        '
        'Button3
        '
        Me.Button3.Location = New System.Drawing.Point(184, 24)
        Me.Button3.Name = "Button3"
        Me.Button3.Size = New System.Drawing.Size(104, 48)
        Me.Button3.TabIndex = 2
        Me.Button3.Text = "Cause Private Single-Level Exception"
        '
        'Button4
        '
        Me.Button4.Location = New System.Drawing.Point(184, 88)
        Me.Button4.Name = "Button4"
        Me.Button4.Size = New System.Drawing.Size(104, 48)
        Me.Button4.TabIndex = 3
        Me.Button4.Text = "Cause Private Multi-Level Exception"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(328, 173)
        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button4, Me.Button3, Me.Button2, Me.Button1})
        Me.Name = "Form1"
        Me.Text = "Structured Exception Handling Sample VB"
        Me.ResumeLayout(False)

    End Sub

#End Region

    ' User clicked button for unhandled system exception.
    ' Call a function we know will fail with an exception, in 
    ' this case, opening a file we know doesn't exist.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim foo As System.IO.FileStream
        foo = System.IO.File.Open("Non-existent file", IO.FileMode.Open)
    End Sub

    ' User clicked button for unhandled system exception.
    ' Call a function we know will fail with an exception, in 
    ' this case, opening a file we know doesn't exist. Same as
    ' Previous example, only this time we do it in a try-catch
    ' block to handle the exception it produces. 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Try

            ' Perform an operation that we know will cause an exception

            Dim foo As System.IO.FileStream
            '   foo = System.IO.File.Open("Non-existent file", IO.FileMode.Open)
            foo = System.IO.File.Open("y\r\/ge&8", IO.FileMode.Open)

            ' When an exception is thrown at a lower level of
            ' code, this handler block catches it


        Catch x As System.IO.FileNotFoundException

            ' Perform whatever cleanup we want to do in response
            ' to the exception that we caught

            MessageBox.Show(x.Message)
        Catch x As ArgumentException

            MessageBox.Show(x.Message, "ArgumentException")
        End Try

        MessageBox.Show("After end try")
    End Sub

    ' User clicked Private Single-level exception. Create an object
    ' and call a method on it that we know will throw an exception.
    ' Catch exception and report it to the user.

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Try
            Dim foo As New StructuredExceptionHandlingComponentVB.Class1()
            foo.BottomFunction()
        Catch x As Exception
            MessageBox.Show("Private exception handler: Message = " + _
                x.Message + " Source = " + x.Source + _
                "Stack Trace = " + x.StackTrace)
        End Try

    End Sub

    ' User clicked Private Multi-level exception. Create an object
    ' and call a method on it that we know will throw an exception. The
    ' object uses a try-finally handler internally to demonstrate that feature.
    ' Catch exception and report it to the user.

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Try
            Dim foo As New StructuredExceptionHandlingComponentVB.Class1()
            foo.MiddleFunction()
        Catch x As Exception
            MessageBox.Show("Private exception handler: Message = " + _
                x.Message + " Source = " + x.Source + _
                "Stack Trace = " + x.StackTrace)
        End Try

    End Sub

End Class
