我有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”等的复选框......
答案 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的代码。 请注意,代码中没有错误处理,这意味着这是您的一部分...