1

大学のプロジェクトとして、ユーザーが劇場の座席を予約できるようにするプログラムを作成しています。ユーザーがクリックして座席を予約できる一連の画像ボックスが特徴です。画像ボックス内の画像は、押すたびに赤と緑の間で変化します(緑の場合、クリックすると赤になるなど)。

関数 DecisionEnable に関しては、値 SeatNo は有効な配列内の座席を表します。この値は各ボックスに固有です (座席 A1 の場合、seatno は 1 です)。この値は、同じボックスに対して同じである必要があります。シートシリアルは、各ピクチャボックス (a1、a2、a3、a4、a5 など) に付けられた名前です。

最初の 5 席のコードのみを投稿しました。これにより、私が何を求めているかについての一般的な考えが得られるはずです。

私が求めているのは、ピクチャボックスのすべてのクリックイベントをどのように「圧縮」できるかということです。そのため、「DetermineEnable」関数を 50 回以上呼び出すのではなく、1 回または 2 回呼び出すだけで済みます。

どうもありがとう!

' /// VISUAL AND INTERACTIVE DISPLAY
Sub DetermineEnable(ByVal SeatNo As Integer, ByVal SeatSerial As PictureBox)
    If Enabled(SeatNo) = True Then
        Enabled(SeatNo) = False
        TotalCustomers = TotalCustomers - 1
    ElseIf Enabled(SeatNo) = False Then
        Enabled(SeatNo) = True
        TotalCustomers = TotalCustomers + 1
    End If
    PictureLocation(SeatNo, SeatSerial)
    UpdateEverything()
End Sub

Function PictureLocation(ByVal SeatNo As Integer, ByVal Picturebox As PictureBox) As String
    If Enabled(SeatNo) = True Then
        PictureLocation = "C:\Users\Wallace\Desktop\Theatre_Booking_System\enabled.png"
    Else
        PictureLocation = "C:\Users\Wallace\Desktop\Theatre_Booking_System\disabled.png"
    End If
    Picturebox.ImageLocation = PictureLocation
End Function

Private Sub a1_Click(sender As System.Object, e As System.EventArgs) Handles a1.Click
    DetermineEnable(1, a1)
End Sub
Private Sub a2_Click(sender As System.Object, e As System.EventArgs) Handles a2.Click
    DetermineEnable(2, a2)
End Sub
Private Sub a3_Click(sender As System.Object, e As System.EventArgs) Handles a3.Click
    DetermineEnable(3, a3)
End Sub
Private Sub a4_Click(sender As System.Object, e As System.EventArgs) Handles a4.Click
    DetermineEnable(4, a4)
End Sub
Private Sub a5_Click(sender As System.Object, e As System.EventArgs) Handles a5.Click
    DetermineEnable(5, a5)
End Sub
4

3 に答える 3

3

プロパティに整数を格納しTagます。同じサブを使用してすべてのクリック イベントを処理し、送信者を PictureBox (クリックされた PictureBox) にキャストします。a1.Tag = 1

Private Sub a1_Click(sender As System.Object, e As System.EventArgs) Handles a1.Click, a2,Click, a3.Click'etc...
   Dim pb As PictureBox = DirectCast(sender, PictureBox)
   DetermineEnable(Convert.ToInt32(pb.Tag), pb)
End Sub
于 2013-10-26T17:16:31.713 に答える