我正在从事一个项目,该项目需要我迭代tabpage上的控件列表以查找所有复选框。然后根据框的状态(已检查或未选中)选择单个变量(文件名),然后在文件系统上执行批处理重命名或删除文件(cb.checked = pertric action)。
。我设法为控件的迭代创建了"每个"(谢谢Google),但我正在努力弄清楚如何选择变量。它们的命名都不同,显然是复选框。还将复选框静态分配给表单/TABPAGE。这是我目前拥有的。
Public Sub delBut_code(ByRef fname As String)
If (Sanity = 1) Then
For Each cb As Control In Form1.Controls
If TypeOf cb Is CheckBox AndAlso DirectCast(cb,
CheckBox).Checked Then
If My.Computer.FileSystem.FileExists(fname) Then
My.Computer.FileSystem.DeleteFile(fname)
End If
End If
Next
MessageBox.Show("All Actions Completed Successfully")
Else
MessageBox.Show("Please select a File To Delete")
End If
End Sub
这是一些变量的示例:
Dim castle As String = selPath & "zm_castle_loadingmovie.txt"
Dim factory As String = selPath &
"zm_factory_load_factoryloadingmovie.txt"
Dim island As String = selPath & "zm_island_loadingmovie.txt"
n.b selpath收集用户输入的文件夹路径,可以在此处忽略
我真的很感谢任何指示。
首先,您可以通过循环做得更好:
Public Sub delBut_code(ByRef fname As String)
If Sanity <> 1 Then
MessageBox.Show("Please select a File To Delete")
Exit Sub
End If
Dim checked = Form1.Controls.OfType(Of CheckBox)().Where(Function(c) c.Checked)
For Each box As CheckBox in checked
Try
'A file not existing is only one reason among many this could fail,
' so it needs to be in a Try/Catch block.
' And once you're using a Try/Catch block anyway,
' the FileExists() check becomes a slow and unnecessary extra trip to the disk.
My.Computer.FileSystem.DeleteFile(fname)
Catch
'Do something here to let the user know it failed for this file
End Try
Next
MessageBox.Show("All Actions Completed")
End Sub
但是现在您需要知道该fname
变量中的正确值。这个问题中没有足够的信息来完全回答这个问题,但是我们可以提出一些建议。您有多种方法可以做到这一点:
- 构建字符串变量时,将
Tag
属性设置在复选框中。然后fname
变为DirectCast(box.Tag, String)
。 - 从复选框继承一个自定义控件以使用,而不是具有用于文件名的附加字符串属性的普通复选框。构建字符串变量时设置此属性。
- 以一种可以从复选框变量名来派生字符串变量名称的方式,然后使用
Switch
从每个box.Name
。 - 保留将复选框映射到右字符串值的
Dictionary(Of CheckBox, String)
。
但是,不知道应用程序的更多上下文,我不愿将其中的任何一个都推荐给其他情况。