Visual Studio - 对“X”个复选框执行事件操作?

时间:2012-11-18 14:30:19

标签: visual-studio events visual-studio-2012 checkbox

我有20个复选框。

这是复选框nº1的事件:

Public Sub C1CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles C1CheckBox1.CheckedChanged
    If C1CheckBox1.Checked = True Then My.Settings.box1_selected = "Y" Else My.Settings.box1_selected = "N"
    Dim checkedpath1 = C1CheckBox1.Text
End Sub

我知道我可以在“句柄”中添加所有复选框,但我的复选框数量未确定,这就是我想要做的事情:

(伪代码)

Public Sub ALL_THE_CHECKBOXES_CheckedChanged(sender As Object, e As EventArgs) Handles ALL_THE_CHECKBOXES.CheckedChanged
    If ANY_CHECKBOX.Checked = True
        My.Settings.boxNUMBER_OF_THIS_SELECTED_CHECKBOX_selected = "Y"
    Else 
        My.Settings.boxNUMBER_OF_THIS_SELECTED_CHECKBOX_selected = "N"
    End If
    Dim checkedpathNUMBER_OF_THIS_SELECTED_CHECKBOX = C1CheckBoxNUMBER_OF_THIS_SELECTED_CHECKBOX.Text
End Sub

我需要生成一个处理未终止数量的复选框的事件, 如果选中任何复选框,我需要执行相同的操作,但仅在选中的复选框中。

我希望你能理解......

基本上我想记住在设置中选中了复选框而不是......

谢谢你的阅读!

更新

在表单加载时,我使用以下代码创建所有表单复选框:

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim List As Integer = 0
    Dim posy As Integer = 10

    filesystem = CreateObject("Scripting.FileSystemObject")
    ThisDir = filesystem.GetFolder(My.Settings.folderpath)

    For Each folder In ThisDir.Subfolders
        List = List + 1
        posy = posy + 20

        Dim newCheckBox As New CheckBox()
        Panel1.Controls.Add(newCheckBox)
        newCheckBox.Name = "checkbox" & List.ToString()
        newCheckBox.Text = folder.name
        newCheckBox.Location = New Point(10, posy)
    Next
End Sub

这会创建一个名为“checkbox1”,“checkbox2”,“checkbox3”等的复选框......

1 个答案:

答案 0 :(得分:2)

所有复选框都在另一个控件内。可能是形式,面板无论如何。因此,您可以循环浏览这些复选框,并为找到的每个复选框手动分配事件处理程序

修订示例代码:

您需要一个名为 MyCBs 的StringCollection类型的设置 - 或者您可以使用您喜欢的任何名称,只需对代码进行必要的更改。

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    My.Settings.Save()
End Sub

Private Sub AnyCB_CheckedChanged(sender As Object, e As EventArgs)

    Dim cb = DirectCast(sender, CheckBox)
    If cb.Checked AndAlso Not My.Settings.MyCBs.Contains(cb.Name) Then
        My.Settings.MyCBs.Add(cb.Name)
    ElseIf Not cb.Checked AndAlso My.Settings.MyCBs.Contains(cb.Name) Then
        My.Settings.MyCBs.Remove(cb.Name)
    End If

End Sub

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown

    If My.Settings.MyCBs Is Nothing Then My.Settings.MyCBs = New Collections.Specialized.StringCollection

    For Each s In My.Settings.MyCBs
        DirectCast(Me.Controls(s), CheckBox).Checked = True
    Next

    For Each cb In Me.Controls.OfType(Of CheckBox)()
        AddHandler cb.CheckedChanged, AddressOf AnyCB_CheckedChanged
    Next

End Sub

此示例将检查复选框的状态保存在StringCollection中的my.settings中。如果选中CB,则将其名称添加到集合中,如果未选中,则删除其名称。这意味着在启动时,您只需检查集合中的哪个CB名称,并将其检查的统计信息设置为true。最后,您使用AddHandler来执行表单中包含的任何CB的代码。 请注意,代码中没有错误处理,这意味着这是您的一部分...