没有错误时该怎么办?

时间:2012-04-11 20:40:59

标签: vb.net

Hiim对vb相当新,所以我希望我解释一下这个, 我的问题是我正在创建一个影院预订系统,我似乎无法通过提交按钮打开下一个表单而没有组合框做同样的事情。 我有四个组合框和一个提交按钮都链接到同一事件。这样用户就可以选择票数,总票数会自动显示在总标签中,当按下提交按钮时,新的表格会出现Form3 ......

我需要至少选择一个组合框,否则会出现错误“请至少选择一个选票”,如果在按下提交按钮时至少选择了一个,则下一个表格应该出现了,但是当我选择了一个下拉框的代码时,它会打开一个新表格,我知道我的问题..但我不知道如何得到我想要的。

我的代码如下:

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

任何帮助,这将是一个很大的帮助..静止了几个小时。

2 个答案:

答案 0 :(得分:1)

是否缺少某些代码?我看不到对SubmitForm_OpenBooking的调用。

无论如何,你需要分开你的逻辑。

  1. 您应该从SelectedIndexChanged中删除按钮单击事件。我真的很惊讶它有效。
  2. 删除try / catch部分。它与SelectedIndexChanged无关,你不应该将它们用于逻辑流程。
  3. 为Submit按钮添加Validating事件处理程序,该处理程序检查至少选择了一个组合(不使用例外)。您甚至可以为此添加ErrorProvider。
  4. 为提交按钮添加OnClick事件处理程序以显示新表单。

答案 1 :(得分:0)

这部分代码存在问题:

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

使用And以这种方式不会给出您可能期望的结果。它对SelectedIndexValues执行按位和运算。如果要检查所有选定索引的值是否为-1,则应执行以下操作:

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

使用AndAlso而不是And。

也是一个好主意

此外,没有理由在代码中使用Try-Catch子句。只需在If语句中显示消息框。