I am finishing up this program and have a small bug with my exit on my menu I created. In my code below, if I click on the exit button on my form or right click the form and click exit, it asks me if I want to exit the form and click no and no issue. When I click on the file and then exit on my menu at the top it asks the same thing but when I click no the dialog box comes up one extra time to ask me if I want to close the form. After I click no the second time it goes away. If I click yes the first time it aks me from the menu screen it goes away no issue so it only appears when I click no the first time from the menu. I am sure this is an easy fix but just need a second pair of eyes...

Code:
#Region " File Menu Events "

    'Add exitFormToolStripMenuItem.click, exitFormToolStripMenuItem1.click to the end of the private sub
    'so the context menu strip works when right clicking on form
    Private Sub exitButton_Click(sender As Object, e As EventArgs) Handles exitButton.Click, ExitToolStripMenuItem.Click,
        ExitToolStripMenuItem2.Click

        'Close the form if the system user responds yes
        Dim messageString As String = "Do you want to close the form?"
        Dim buttonDialogResult As DialogResult = MessageBox.Show(messageString, "Quit?", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
        MessageBoxDefaultButton.Button2)
        If buttonDialogResult = Windows.Forms.DialogResult.Yes Then
            Me.Close()
        End If
    End Sub

    Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click

        'Call exit button click event
        exitButton.PerformClick()
    End Sub

    Private Sub ColorToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ColorToolStripMenuItem.Click

        'Change the form's back color property
        'Store current form color to the controls' color property
        'Display the color component, and save the color to the form's backcolor property
        ColorDialog1.Color = Me.BackColor
        ColorDialog1.ShowDialog()
        Me.BackColor = ColorDialog1.Color
    End Sub

    Private Sub FontToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FontToolStripMenuItem.Click

        'Change the font user for the entire form
        'Store current font to the control's font peoperty
        'Display the font component, and save the new font to the form's controls
        FontDialog1.Font = Me.Font
        FontDialog1.ShowDialog()
        Me.Font = FontDialog1.Font
        MenuStrip1.Font = FontDialog1.Font
    End Sub

    Private Sub ColorToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ColorToolStripMenuItem1.Click

        'The source control property of a context menu references the control to which the mouse is pointing at the time
        'that the mouse is clicked.
        'It is used to enable changing a specific control's property settings
        'Change color of object
        'Send color to dialog box
        ColorDialog1.Color = ContextMenuStrip1.SourceControl.ForeColor
        ColorDialog1.ShowDialog()

        'Display new color
        ContextMenuStrip1.SourceControl.ForeColor = ColorDialog1.Color
    End Sub

#End Region

#Region " Help Menu and Miscellaneous Events "

    Private Sub noneRetirementPlanRadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles noRetirementPlanRadioButton.CheckedChanged,
    retirementStandardRadioButton.CheckedChanged, retirement401ARadioButton.CheckedChanged

        'Declare retirement benefit constants 
        Const RETIREMENT_STANDARD As Decimal = 0.05D
        Const RETIREMENT_401A As Decimal = 0.08D

        'Create a radio button in memory and store the values of sender to it
        Dim checkedRadioButton As RadioButton = CType(sender, RadioButton)

        'Use select case to evaluate the name of the radio button to decide which controls to enable/disable
        Select Case checkedRadioButton.Name
            Case "noRetirementRadioButton"
                retirementRateDecimal = 0D
            Case "retirementStandardRadioButton"
                retirementRateDecimal = RETIREMENT_STANDARD
            Case "retirement401ARadioButton"
                retirementRateDecimal = RETIREMENT_401A
        End Select
    End Sub

    Private Sub AboutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click

        'Display the About Message box
        Dim messageString As String = "Programmed by Bryan Kruep" & ControlChars.NewLine & "Today's Date/Time:  " & Date.Now.ToString
        Dim titleString As String = "About the Payroll Application"

        'Display output message
        MessageBox.Show(messageString, titleString, MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub

#End Region

#Region " Function Processes "

    'This function simplifies the compute button's click event by moving the computations fross gross pay to a separate function
    'The function returns a decimal value by storing the computed value of gross pay to the name of the function
    Private Function computeGrossPay() As Decimal

        'Parse textbox values to memory variables
        Dim hoursDecimal = Decimal.Parse(hoursWorkedTextBox.Text, Globalization.NumberStyles.Number)
        Dim payRateDecimal = Decimal.Parse(payRateTextBox.Text, Globalization.NumberStyles.Currency)

        'Compute gross pay
        'Gross pay is computed and returned by assigning a value to the name of the function
        If hoursDecimal <= 40D Then
            computeGrossPay = Decimal.Round(hoursDecimal * payRateDecimal, 2)
        Else
            computeGrossPay = Decimal.Round((40D * payRateDecimal) + ((hoursDecimal - 40D) * payRateDecimal * 1.5D), 2)
        End If
    End Function

    'In this function the input parameter grossPayDecimal is passed to the computerFederalTax function
    'The value of federalTaxDecimal is returned to the calling prodcedure with a return statement
    'ByVal sends a copy of the argument's value to the procedure so the procedure does not alter the original copy of the value
    Private Function computeFederalTax(ByVal grossPayDecimal As Decimal) As Decimal

        'Const for Federal Tax Rate decimals
        Const TAX_08_LEVEL As Decimal = 0.08D
        Const TAX_18_LEVEL As Decimal = 0.18D
        Const TAX_28_LEVEL As Decimal = 0.28D
        Const TAX_08_PERCENT As Decimal = 985D
        Const TAX_18_PERCENT As Decimal = 2450D

        'Declare variables used within the function
        Dim federalTaxDecimal As Decimal

        'Compute the federal tax
        'Use this when a single variable, single expression, single control property, or similiar object
        'is to be evaluated and different actions are taken depending on the value of the expression
        'Advantage is it is easier to read than multiple if statements
        Select Case grossPayDecimal
            Case Is <= TAX_08_PERCENT
                federalTaxDecimal = Decimal.Round(TAX_08_LEVEL * grossPayDecimal, 2)
            Case Is <= TAX_18_PERCENT
                federalTaxDecimal = Decimal.Round(grossPayDecimal * TAX_18_LEVEL, 2)
            Case Else
                federalTaxDecimal = Decimal.Round(grossPayDecimal * TAX_28_LEVEL, 2)
        End Select

        'Return a value
        Return federalTaxDecimal
    End Function

    'This functions anccepts an input parameter grossPayDecimal that is passed to the function ffrom the calling procedure
    Private Function computeBenefitsDeduction(ByVal grossPayDecimal As Decimal) As Decimal

        'CONST VARIABLES NEVER CHANGE ----- REMEMBER THIS!!!!!!!!!!!!!!!!!!!!!!
        'Const for Insurance - These are not module level variables because the results can change after being added together
        Const MEDICAL_INSURANCE As Decimal = 35.75D
        Const LIFE_INSURANCE As Decimal = 18.35D
        Const DENTAL_INSURANCE As Decimal = 4D

        'Declare variables used within the function
        Dim benefitsCostDecimal As Decimal

        'Compute insurance benefit deduction
        If medicalInsuranceCheckBox.Checked Then
            benefitsCostDecimal += MEDICAL_INSURANCE
        End If
        If lifeInsuranceCheckBox.Checked Then
            benefitsCostDecimal += LIFE_INSURANCE
        End If
        If dentalInsuranceCheckBox.Checked Then
            benefitsCostDecimal += DENTAL_INSURANCE
        End If

        'Use the retirement rate set in the checked changed event for the retirement radio button controls
        benefitsCostDecimal += Decimal.Round(grossPayDecimal * retirementRateDecimal, 2)

        'Return cost of benefits
        Return benefitsCostDecimal
    End Function

    Private Function validData() As Boolean

        'The validData function shown here is an example of a Boolean function because it returns a value of either True
        'or False - the business rules are either all satisfied or the data cannot be processed
        'Assume the data is not valid
        validData = False

        'Enforce data validation rules
        If nameTextBox.Text = String.Empty Then
            'Required employee name is missing
            MessageBox.Show("Name is required", "Name Missing Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            nameTextBox.Focus()

        ElseIf employeeIDMaskedTextBox.Text.Trim.Length <> 11 OrElse employeeIDMaskedTextBox.Text.IndexOf(" ", 0, employeeIDMaskedTextBox.Text.Length) <> -1 Then
            'Required employee ID is not long enough or is not complete
            MessageBox.Show("Employee ID is not complete", "Employee ID Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            employeeIDMaskedTextBox.Focus()
            employeeIDMaskedTextBox.SelectAll()

        ElseIf departmentTextBox.Text = String.Empty Then
            'Required department is missing
            MessageBox.Show("Department is required", "Department Missing Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            departmentTextBox.Focus()

        ElseIf IsNumeric(hoursWorkedTextBox.Text) = False OrElse (Decimal.Parse(hoursWorkedTextBox.Text, Globalization.NumberStyles.Number) <= 0D Or Decimal.Parse(hoursWorkedTextBox.Text, Globalization.NumberStyles.Number) > 60D) Then
            'Hours must be numeric and within allowable range
            MessageBox.Show("Hours worked must be a number between 0 and 60", "Hours Value Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            hoursWorkedTextBox.Focus()
            hoursWorkedTextBox.SelectAll()

        ElseIf IsNumeric(payRateTextBox.Text) = False OrElse Decimal.Parse(payRateTextBox.Text, Globalization.NumberStyles.Currency) <= 0D Then
            'Pay rate must be numeric and greater than zero
            MessageBox.Show("Pay rate worked must be a number and greater than zero.", "Pay Rate Value Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            payRateTextBox.Focus()
            payRateTextBox.SelectAll()

        Else

            'Data rules are all valid
            validData = True
        End If
    End Function

#End Region

End Class
I have to cut my code down so it is missing the top portion...please let me know if I need to paste it in