【问题标题】:checking dynamically created checkbox states检查动态创建的复选框状态
【发布时间】:2013-03-09 03:30:43
【问题描述】:

我知道这个问题之前已经回答过,但我似乎无法得到一个可以满足我想要的答案,即能够检查我的动态创建的复选框是否已被选中,我需要能够检查每个复选框单独。

这是我创建复选框的代码

Private Sub CreateCheckbox(ByVal x As Integer, ByVal y As Integer, text As String, ByVal id As Integer)
    Dim btnYes As System.Windows.Forms.CheckBox
    btnYes = New System.Windows.Forms.CheckBox
    btnYes.AutoSize = True
    btnYes.TabStop = True
    btnYes.Name = "CheckBox" + id
    btnYes.TabIndex = id
    btnYes.Parent = Panel1
    btnYes.Size = New System.Drawing.Size(81, 17)
    btnYes.Location = New System.Drawing.Point(x, y)
    btnYes.TabIndex = 1
    btnYes.Text = text
    Button1.TabIndex = Button1.TabIndex + 1
    Me.Panel1.Controls.Add(btnYes)
End Sub

我需要类似的东西

for i as integer = 0 to id step 1
 if checkbox(i).checked = true then
   'Do Something
 end if
next

【问题讨论】:

    标签: .net vb.net dynamic checkbox


    【解决方案1】:

    您应该为您动态创建的checkboxes 添加handler,给定的代码将创建一个check box,顺便添加checkedChanged 事件处理程序。

    Private Sub CreateCheckbox(ByVal x As Integer, ByVal y As Integer, text As String, ByVal id As Integer)
        Dim btnYes As System.Windows.Forms.CheckBox
        btnYes = New System.Windows.Forms.CheckBox
        ...............
        ...............
    
        Me.Panel1.Controls.Add(btnYes)
    
        'Now here add a common handler for your created checkbox
         AddHandler btnYes.CheckedChanged addressOf CommonCheckedChangeHandler
    End Sub
    

    下面的过程将根据我们上面添加的事件(checkedchanged)被调用。我们可以使用参数sender访问特定的复选框

    private sub CommonCheckedChangeHandler(ByVal sender As Object, ByVal e As System.EventArgs)
       ' This method will be invoked when your dynamically
       ' created check box's checked state got changed
    End sub
    

    编辑 1:

    使用下面的代码遍历panel里面来检查你的checkboxes

    For Each chkBox In Panel1.Controls.OfType(Of CheckBox)()
      'Check here whether your check boxes are checked true/false
    Next
    

    编辑 2:

    OfType 属于LINQ,如果你不想要上面的代码试试这个代码

    for i as integer = 0 to id step 1
     if Ctype(panel1.controls("CheckBox" & i), checkbox).checked = true then
       'Do Something
     end if
    next
    

    【讨论】:

    • 好的,我尝试了你的方法,但我如何让它执行代码,而不是在选中复选框时,而是在按下按钮时。即按下按钮它检查哪些复选框被选中并执行代码。
    • 我收到错误“OfType”不是“System.Windows.Forms.Control.ControlCollection”的成员。这就是为什么我问这个问题,因为无论我尝试什么,我都无法得到一个有效的解决方案。
    • 我不认为更新的代码不起作用,因为我在发布之前对其进行了测试。!如果您愿意,可以评论您使用新更新尝试过的代码。它可能有助于解决您的问题。
    • 好的,我在编译时没有错误,但是当我在上面没有断点的情况下执行代码时,我得到“对象引用未设置为对象的实例”但是如果我在上面放置一个断点 if Ctype(panel1.controls("CheckBox" & i), checkbox).checked = true 然后等待大约一秒钟它工作正常。任何想法
    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多