【问题标题】:VB RadioButton into ArrayVB单选按钮成数组
【发布时间】:2015-09-22 14:23:07
【问题描述】:

尝试制作一个航空公司预订程序,用户输入他们的姓名,然后通过单选按钮选择他们的座位。

一旦他们预订座位,程序应该会重置,所选座位不再可供下一个选择座位的人使用。所以这就是我感到困惑的地方。

如何让以前“保留”的单选按钮更改颜色,并且在下一个人选择座位时无法选择。最终飞机会满员,没有更多的用户可以选择。

如果需要为此提供上下文或说明,我很乐意补充更多信息。

提前谢谢你。

【问题讨论】:

  • 您可以使用 TAG 属性来跟踪它是否可用。
  • 只需将Enabled 属性设置为False 以获取已被占用但无法选择的席位
  • ...或者使单选按钮隐藏或不可见。有很多方法可以做到这一点。我个人认为这应该在设计阶段解决,而不是在编码阶段......
  • 你不能真正让按钮本身改变颜色(没有很多工作),但你可以让按钮的背景颜色改变(按钮周围的区域),就像其他人说,您可以启用或禁用该按钮,使其不可点击。另外,如果 button.clicked 已经被保留,只需将其设置为 true。
  • 此应用程序是否只有一个实例在运行,或者您如何处理并发预订?会认为你需要重新加载和禁用按钮来管理它。

标签: arrays vb.net radio-button


【解决方案1】:
Private Sub UpdateSeat()
    For i As Integer = 0 To 3
        If arrSeatAvailableFirst(i) = False Then
            arrSeatFirst(i).BackColor = Color.DarkRed
            arrSeatFirst(i).Enabled = False


        End If

然后在按钮的 Click 事件上

Private Sub btnReserve_Click(sender As Object, e As EventArgs) Handles   btnReserve.Click
    For i As Integer = 0 To 3
        If arrSeatFirst(i).Checked Then
            arrSeatAvailableFirst(i) = False
            radSelected = arrSeatFirst(i).Text
        Else
            arrSeatAvailableFirst(i) = True
        End If
   End Sub
End Class

【讨论】:

    【解决方案2】:

    以下内容应该可以帮助您顺利上路。只需将其直接粘贴到名为AirplaneSeats 的空白 WinForm 应用程序中;一切都是在运行时添加的。设置断点并逐步执行所有步骤以查看详细信息。

    Option Strict On
    Option Explicit On
    
    Imports System.Windows.Forms
    
    
    Public Class AirplaneSeats
        Private numberOfSeats As Integer = 30I
        Private SeatLayoutPanel As New FlowLayoutPanel With {.FlowDirection = FlowDirection.LeftToRight, .AutoScroll = True, .Dock = DockStyle.Fill}
        Private TableLayoutPanel1 As New TableLayoutPanel With {.Dock = DockStyle.Fill, .ColumnCount = 1, .RowCount = 2}
        Private SubmitBtn As New Button With {.Text = "Submit", .Anchor = AnchorStyles.Right}
        Private reservedSeats As New List(Of Int32)
    
    
        Private Sub AirplaneSeats_Load(sender As Object, e As EventArgs) Handles Me.Load
            AddHandler Me.SubmitBtn.Click, AddressOf SubmitBtnClicked
    
            For i As Integer = 1I To numberOfSeats
                Dim seatRadio As New RadioButton With {.Text = "Seat " & i, .Tag = i, .Checked = False, .Enabled = True, .AutoCheck = True}
                AddHandler seatRadio.Click, AddressOf seatButtonClicked
                Me.SeatLayoutPanel.Controls.Add(seatRadio)
            Next
    
            Me.TableLayoutPanel1.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 100.0!))
            Me.TableLayoutPanel1.RowStyles.Add(New RowStyle(SizeType.Percent, 100.0!))
            Me.TableLayoutPanel1.RowStyles.Add(New RowStyle())
            Me.TableLayoutPanel1.Controls.Add(Me.SeatLayoutPanel, 0I, 0I)
            Me.TableLayoutPanel1.Controls.Add(Me.SubmitBtn, 0I, 1I)
            Me.Controls.Add(Me.TableLayoutPanel1)
        End Sub
    
        Private Sub seatButtonClicked(sender As Object, e As EventArgs)
            Dim selectedSeat As RadioButton
            If TypeOf sender Is RadioButton Then selectedSeat = DirectCast(sender, RadioButton) Else Exit Sub
    
            For Each ctrl As Control In Me.SeatLayoutPanel.Controls
                If TypeOf ctrl Is RadioButton Then
                    Dim ctrlRadio As RadioButton = DirectCast(ctrl, RadioButton)
                    If CInt(ctrl.Tag) <> CInt(selectedSeat.Tag) Then
                        RemoveHandler ctrlRadio.Click, AddressOf Me.seatButtonClicked
                        ctrlRadio.Checked = False
                        AddHandler ctrlRadio.Click, AddressOf seatButtonClicked
                    End If
                End If
            Next
        End Sub
    
        Private Sub SetSeatAvailability()
            For Each ctrl As Control In Me.SeatLayoutPanel.Controls
                If Me.reservedSeats.Contains(CInt(ctrl.Tag)) Then ctrl.Enabled = False
            Next
        End Sub
    
        Private Sub SubmitBtnClicked(sender As Object, e As EventArgs)
            For Each ctrl As Control In Me.SeatLayoutPanel.Controls
                If TypeOf ctrl Is RadioButton Then
                    Dim ctrlRadio As RadioButton = DirectCast(ctrl, RadioButton)
                    If ctrlRadio.Checked Then
                        Me.reservedSeats.Add(CInt(ctrlRadio.Tag))
                        ctrlRadio.Checked = False
                        Exit For
                    End If
                End If
            Next
            SetSeatAvailability()
        End Sub
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-17
      • 2016-01-15
      • 2012-09-09
      • 2012-03-06
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多