如何根据复选框状态选择特定变量,因为我迭代每个变量



我正在从事一个项目,该项目需要我迭代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)

但是,不知道应用程序的更多上下文,我不愿将其中的任何一个都推荐给其他情况。

相关内容

最新更新