我正在处理一个项目,该项目要求我遍历标签页上的控件列表以查找所有复选框。然后根据框的状态(选中或取消选中)选择单个变量(文件名),然后执行批量重命名或删除文件系统上的文件(cb.checked =执行操作)。
我已经设法为每个"创建了#34;对于控件的迭代(感谢谷歌),但我正在努力弄清楚如何选择变量。显然,它们的名称都不同,复选框也是如此。此外,复选框静态分配给表单/标签页。这就是我现在所拥有的。
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收集用户输入的文件夹路径,可在此处忽略
我真的很感激任何指针。
答案 0 :(得分:0)
首先,你可以用循环做得更好:
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)
,将复选框映射到正确的字符串值。但是在不了解应用程序的更多背景的情况下,我会毫不犹豫地推荐其中任何一个最适合您的情况。