可变整数值

Variable integer values

这只是我第二次 post 在这里。我住得很开心。

我遇到此代码的问题

For i As Integer = 1 To 7
    CType(Me.Controls.Find(String.Format("CheckBox{0}", i), True)(0), CheckBox).ForeColor = myFontDialog.Color
Next`

基本上,这些控件所在的表单位于一个选项卡控件内,该控件具有删除不需要的页面的选项。唯一的问题是,如果其中一个页面上有这些控件被删除,那么在选择字体颜色时,我会在 运行 时得到“索引超出数组范围”。 我试过使用 Tabpage1.visible = false 但这实际上并没有从控件中删除页面选项卡。我希望得到一些关于如何使整数范围以不同的整数结尾或以某种方式使我自己更容易的指导。我只是一个业余编码员,所以大多数更复杂的东西都让我有点难以理解,但我在 google 和其他网站上找到的所有“答案”都没有用。

I guess I can't embed images yet, so it made this link.

我会创建一个复选框列表,并在关闭的选项卡上删除相应的复选框。然后,当您想要更改 属性 时,只需循环遍历列表即可。

Private lstCheck As List(Of CheckBox)
    Private Sub CreateCheckBoxesList()
        lstCheck = New List(Of CheckBox) From {CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6, CheckBox7}
    End Sub
    Private Sub CloseTab(TabIndexClosed As Integer)
        Select Case TabIndexClosed
            Case 0
                lstCheck.Remove(CheckBox1)
                lstCheck.Remove(CheckBox2)
            Case 1
                lstCheck.Remove(CheckBox3)
                lstCheck.Remove(CheckBox4)
            Case 2
                lstCheck.Remove(CheckBox5)
                lstCheck.Remove(CheckBox6)
                lstCheck.Remove(CheckBox7)
        End Select
    End Sub
    Private Sub ChangeCheckBoxColor()
        For Each chk As CheckBox In lstCheck
            chk.ForeColor = Color.Red
        Next
    End Sub

根据评论编辑: 这是另一个依赖于事件过程的例子。该列表是在 Form.Load 方法中创建的。我向您的 ToolStrip 添加了对 CloseTab 和 AddTab 的调用。这些调用更新复选框列表。我在表单中添加了一个按钮,用于更改复选框的文本颜色。

Private lstCheck As List(Of CheckBox)

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CreateCheckBoxesList()
    End Sub

    Private Sub CreateCheckBoxesList()
        lstCheck = New List(Of CheckBox) From {CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6, CheckBox7}
    End Sub

    Private Sub CloseTab(TabIndexClosed As String)
        Select Case TabIndexClosed
            Case "Tab1"
                lstCheck.Remove(CheckBox1)
                lstCheck.Remove(CheckBox2)
            Case "Tab2"
                lstCheck.Remove(CheckBox3)
                lstCheck.Remove(CheckBox4)
            Case "Tab3"
                lstCheck.Remove(CheckBox5)
                lstCheck.Remove(CheckBox6)
                lstCheck.Remove(CheckBox7)
        End Select
    End Sub

    Private Sub AddTab(TabAdded As String)
        Select Case TabAdded
            Case "Tab1"
                lstCheck.Add(CheckBox1)
                lstCheck.Add(CheckBox2)
            Case "Tab2"
                lstCheck.Add(CheckBox3)
                lstCheck.Add(CheckBox4)
            Case "Tab3"
                lstCheck.Add(CheckBox5)
                lstCheck.Add(CheckBox6)
                lstCheck.Add(CheckBox7)
        End Select
    End Sub

    Private Sub btnRed_Click(sender As Object, e As EventArgs) Handles btnRed.Click
        For Each chk As CheckBox In lstCheck
            chk.ForeColor = Color.Red
        Next
    End Sub

    Private Sub HideRouterFormatterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HideRouterFormatterToolStripMenuItem.Click
        If HideRouterFormatterToolStripMenuItem.Checked Then
            TabControl1.TabPages.Remove(TabPage1)
            CloseTab("Tab1)")
        End If
        If HideRouterFormatterToolStripMenuItem.CheckState = 0 Then
            TabControl1.TabPages.Add(TabPage1)
            AddTab("Tab1")
        End If
    End Sub

我只是从你的工具条的名称中了解到这可能是一个 WPF 应用程序,在这种情况下,所有的赌注都没有了。我假定 Windows 表格。将其包含在您的问题中会很好。这可能有效,但它是为 WinForms 设计的。

根据评论编辑:这是另一个依赖于事件过程的示例。该列表是在 Form.Load 方法中创建的。我向您的 ToolStrip 添加了对 CloseTab 和 AddTab 的调用。这些调用更新复选框列表。我在表单中添加了一个按钮,用于更改复选框的文本颜色。

Private lstCheck As List(Of CheckBox)

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    CreateCheckBoxesList()
End Sub

Private Sub CreateCheckBoxesList()
    lstCheck = New List(Of CheckBox) From {CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6, CheckBox7}
End Sub

Private Sub CloseTab(TabIndexClosed As String)
    Select Case TabIndexClosed
        Case "Tab1"
            lstCheck.Remove(CheckBox1)
            lstCheck.Remove(CheckBox2)
        Case "Tab2"
            lstCheck.Remove(CheckBox3)
            lstCheck.Remove(CheckBox4)
        Case "Tab3"
            lstCheck.Remove(CheckBox5)
            lstCheck.Remove(CheckBox6)
            lstCheck.Remove(CheckBox7)
    End Select
End Sub

Private Sub AddTab(TabAdded As String)
    Select Case TabAdded
        Case "Tab1"
            lstCheck.Add(CheckBox1)
            lstCheck.Add(CheckBox2)
        Case "Tab2"
            lstCheck.Add(CheckBox3)
            lstCheck.Add(CheckBox4)
        Case "Tab3"
            lstCheck.Add(CheckBox5)
            lstCheck.Add(CheckBox6)
            lstCheck.Add(CheckBox7)
    End Select
End Sub

Private Sub btnRed_Click(sender As Object, e As EventArgs) Handles btnRed.Click
    For Each chk As CheckBox In lstCheck
        chk.ForeColor = Color.Red
    Next
End Sub

Private Sub HideRouterFormatterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HideRouterFormatterToolStripMenuItem.Click
    If HideRouterFormatterToolStripMenuItem.Checked Then
        TabControl1.TabPages.Remove(TabPage1)
        CloseTab("Tab1)")
    End If
    If HideRouterFormatterToolStripMenuItem.CheckState = 0 Then
        TabControl1.TabPages.Add(TabPage1)
        AddTab("Tab1")
    End If
End Sub