0

Hiimはvbにかなり慣れていないので、この権利を説明したいと思います。私が抱えている問題は、劇場予約システムを作成していることです。コンボボックスが同じことを行わないと、[送信]ボタンで次のフォームを開くことができないようです。4つのコンボボックスと送信ボタンがすべて同じイベントにリンクされています。これは、ユーザーがチケットの数を選択できるようにするためです。合計は合計ラベルに自動的に表示され、送信ボタンを押すと新しいフォームが表示されます...

コンボボックスを少なくとも1つ選択する必要があります。そうしないと、「少なくとも1つのチケットを選択してください」というエラーが表示されます。送信ボタンを押したときに少なくとも1つを選択すると、次のフォームが表示されますが、ドロップダウンボックスを選択すると、新しいフォームが開きます。問題はわかっていますが、必要なものを取得する方法がわかりません。

私のコードは以下の通りです:

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

どんな助けでも、これまでのところ、大きな助けになるでしょう..iv何時間もこれにいました。

4

2 に答える 2

1

不足しているコードはありますか?SubmitForm_OpenBookingへの呼び出しが表示されませんでした。

とにかく、ロジックを分離する必要があります。

  1. SelectedIndexChangedからボタンクリックイベントを削除する必要があります。それが機能することに本当に驚いています。
  2. try/catchセクションを削除します。これはSelectedIndexChangedには関係がないため、とにかくロジックフローに使用しないでください。
  3. 少なくとも1つのコンボが選択されていることを確認する[送信]ボタンの検証イベントハンドラーを追加します(例外を使用しないでください)。このためにErrorProviderを追加することもできます。
  4. 送信ボタンにOnClickイベントハンドラーを追加して、新しいフォームを表示します。
于 2012-04-11T21:28:49.087 に答える
0

コードのこの部分には問題があります。

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

Andをこのように使用しても、おそらく期待する結果は得られません。SelectedIndexValuesに対してビット単位のAnd演算を実行します。選択したすべてのインデックスの値が-1であるかどうかを確認する場合は、次のようにする必要があります。

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

Andの代わりにAndAlsoを使用することもお勧めします。

また、コードでTry-Catch句を使用する理由はありません。Ifステートメント内にメッセージボックスを表示するだけです。

于 2012-04-11T21:28:39.380 に答える