0

这只是我在这里的第二篇文章。我非常享受我的逗留。

我对此代码有疑问

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 但这实际上并没有从控件中删除页面选项卡。我希望就如何使整数范围以不同的整数结尾或以某种方式使我自己更容易获得一些指导。我只是一个业余编码员,所以大多数更复杂的东西都让我有点不知所措,但我在谷歌和其他网站上找到的所有“答案”都没有用。

我想我还不能嵌入图像,所以它建立了这个链接。

4

2 回答 2

0

根据评论编辑:这是另一个取决于事件过程的示例。该列表是在 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
于 2018-06-21T23:15:35.420 回答
0

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

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 设计的。

于 2018-06-20T23:32:41.377 回答