MightyMouse
MightyMouse

Reputation: 35

What to do when there is no error present?

Hiim fairly new to vb so i hope i explain this right, the problem I have is that im creating a theatre booking system and i can't seem to get the Submit button to open the next form without the combo boxes doing the same thing. I have four combo boxes and a submit button all linked to the same event. This is so the user can select the number of tickets, the total will display automatically in the total label and when the submit button is pressed a new form, Form3 will appear...

I need at least one of the combo boxes has to be selected or an error will appear saying "please make at lease one ticket selection", then if at least one has been selected when the submit button is pressed the next form should appear, but with the code i have when a drop down box is selected it opens a new form, I know my problem.. but i dont know how to get what i want.

My code is below:

Sub ComboBoxes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged, ComboBox3.SelectedIndexChanged, ComboBox4.SelectedIndexChanged, Submitbtn.Click
    'Assigned an evet handler to all of the comboboxes then calculates the price and puts in total box

    Dim Totalcombo1, Totalcombo2, Totalcombo3, Totalcombo4, Price As Decimal

    Dim valuecombo1 = (ComboBox1.SelectedIndex + 1)  'finds position of option selected & adds one to get number of tickets
    Dim valuecombo2 = (ComboBox2.SelectedIndex + 1)
    Dim valuecombo3 = (ComboBox3.SelectedIndex + 1)
    Dim valuecombo4 = (ComboBox4.SelectedIndex + 1)


    'if the submit button is selected without there being a value selected from any combobox then error should appear, saying at least 1 ticket should be purchased.
    If (ComboBox2.SelectedIndex = -1) Then
        Totalcombo2 = 0
    Else
        Price = 6.5
        Totalcombo2 = valuecombo2 * Price
    End If

    'determines the ticketprice of combobox 1


    If (ComboBox1.SelectedIndex = -1) Then
        Totalcombo1 = 0
    Else
        Price = 9
        Totalcombo1 = valuecombo1 * Price
    End If
    'determines the ticketprice of combobox 2


    If (ComboBox3.SelectedIndex = -1) Then
        Totalcombo3 = 0
    Else
        Price = 6.5
        Totalcombo3 = valuecombo3 * Price
    End If
    'determines the ticketprice of combobox 3


    If (ComboBox4.SelectedIndex = -1) Then
        Totalcombo4 = 0
    Else
        Price = 6.5
        Totalcombo4 = valuecombo4 * Price
    End If
    'determines the ticketprice of combobox 4

    Try
        If (ComboBox1.SelectedIndex And ComboBox2.SelectedIndex And ComboBox3.SelectedIndex And ComboBox4.SelectedIndex) = -1 Then
            Throw New System.Exception()

        End If

    Catch ex As Exception When (ComboBox1.SelectedIndex And ComboBox2.SelectedIndex And ComboBox3.SelectedIndex And ComboBox4.SelectedIndex) = -1
        MessageBox.Show("Please make at least one ticket selection before continuing. ")

    End Try

    Totallbl.Text = Totalcombo1 + Totalcombo2 + Totalcombo3 + Totalcombo4
    'adds the totals of the ticketprices and then inserts into the Total label


End Sub

Sub SubmitForm_OpenBooking()

    Dim FrmBooking As New Form3
    FrmBooking.Show()

    Me.Hide()
End Sub

Any help what so ever, wld be a great help.. iv been at this for hours.

Upvotes: 0

Views: 127

Answers (2)

Lee
Lee

Reputation: 126

Is there some code missing? I couldn't see the call to SubmitForm_OpenBooking.

Regardless, you need to separate your logic.

  1. You should remove the button click event from SelectedIndexChanged. Am really quite surprised it works.
  2. Remove the try/catch section. It isn't pertinent to the SelectedIndexChanged and you shouldn't use them for logic flow anyway.
  3. Add the Validating event handler for the Submit button which checks at least one combo has been selected (don't use exceptions). You could even add an ErrorProvider for this.
  4. Add a OnClick event handler for your submit button to show a new form.

Upvotes: 1

Meta-Knight
Meta-Knight

Reputation: 17845

This part of your code is problematic:

If (ComboBox1.SelectedIndex And ComboBox2.SelectedIndex And ComboBox3.SelectedIndex And ComboBox4.SelectedIndex) = -1 Then

Using And in this manner doesn't give the result you probably expect. It performs a bitwise And operation on the SelectedIndexValues. If you want to check if all selected indexes have a value of -1, you should do it like this:

If ComboBox1.SelectedIndex = -1 And ComboBox2.SelectedIndex = -1 And ComboBox3.SelectedIndex = -1 And ComboBox4.SelectedIndex = -1 Then

It would also be a good idea to use AndAlso instead of And.

Also, there's no reason to use a Try-Catch clause in your code. Just show the message box inside the If statement.

Upvotes: 0

Related Questions