VB,将变量传递给控件

VB, Pass variables to a control

老师给我的任务是在 VB.net 中创建一个电影院预订系统。到目前为止,我已经创建了 50 个复选框,我正在尝试将它们全部重命名为 seat (number)。我的 Form1.load 中有这段代码,但它不起作用,因为它是一种类型而不是表达式。我尝试为此使用一个变量,但它没有用。

这是我的代码:

        For count As Integer = 1 To 54 Step 1
            CheckBox(count).text = "Seat " & count
        Next

请帮忙,或者推荐我另一种方法来完成这个。

创建复选框时设置复选框的名称。要了解如何以编程方式创建复选框,请将复选框添加到表单,然后查看 .designer.vb

dim cb as new checkbox
cb.name = "1"
cb.text = "Seat 1"

您还需要添加位置和其他属性

如果您已经创建了名称为 1、2 的文本框,然后遍历并获取这样的数字:如果您调用它们 CB_1 然后在查找数字之前切断 CB_。

dim cbNumber as int16

For Each c As Control In myContainer.Controls
    If c.GetType() Is GetType(CheckBox) Then
       cbnumber = cint(c.name)
       c.text = "Seat" & cbnumber 
    End If
Next

好吧,这是我的方法。为了测试,只需将 FlowLayoutPanelButtonNumericUpDown 拖放到表单上。

Option Strict On

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For count As Integer = 1 To 54 Step 1
            ' Make a new CheckBox
            Dim chkBox As New CheckBox()
            ' Setup the Checkbox
            With chkBox
                .Tag = count.ToString
                .Name = CStr("seatCheckBox" & count.ToString)
                .Text = String.Format("Seat {0}", count)
                .ThreeState = False
                .Checked = False
            End With

            ' add an event listener for the checkbox checkstate changed event
            AddHandler chkBox.CheckStateChanged, AddressOf Me.CheckBox_CheckStateChanged

            ' Add the checkbox to the control
            Me.FlowLayoutPanel1.Controls.Add(chkBox)

            ' Keep the user from picking something that doesn't exist
            Me.NumericUpDown1.Maximum = CDec(count)
        Next

        ' Add and event listener for the find button click event
        AddHandler Button1.Click, AddressOf Me.FindButton_Clicked

    End Sub

    ' Find the checkbox in the form and return it
    Private Function GetCheckBox(ByVal seatNumber As Integer) As CheckBox
        Dim chkbox As CheckBox

        ' Try to find the Checkbox
        Try
            chkbox = TryCast(Me.Controls.Find(CStr("seatCheckBox" & seatNumber.ToString), True).First, CheckBox)
        Catch ex As Exception
            chkbox = Nothing
        End Try

        'Check if the trycast worked
        If IsNothing(chkbox) Then
            Throw New ArgumentOutOfRangeException("seatNumber", "The seat number to be searched for was not found")
        Else
            Return chkbox
        End If

    End Function

    ' Handle the Chekbox checkState event.
    Private Sub CheckBox_CheckStateChanged(sender As Object, e As EventArgs)
        ' Convert to Checkbox
        Dim chkBox As CheckBox = DirectCast(sender, CheckBox)

        ' Simple result string
        Dim resultstring As String = CStr("Seat Number {0} is now {1}.")

        ' Set the values
        Select Case chkBox.Checked
            Case True
                resultstring = String.Format(resultstring, chkBox.Tag, "taken")
            Case False
                resultstring = String.Format(resultstring, chkBox.Tag, "available")
        End Select

        ' Display it
        MsgBox(resultstring)
    End Sub

    Private Sub FindButton_Clicked(sender As Object, e As EventArgs)
        Try
            ' Get the checkbox and return it's name
            MsgBox(GetCheckBox(CInt(Me.NumericUpDown1.Value)).Name.ToString)
        Catch ex As Exception
            ' Display the error
            MsgBox(ex.Message)
        End Try
    End Sub
End Class