代码循环,当我不需要它时,很难在标题中解释

时间:2017-06-07 07:03:43

标签: vb.net

我正在努力制作最终幻想X-2游戏的进度清单。

我拥有的是:

标签名称“Luca - +1.6”是label1。在那之下是CheckedListBox1,然后是Label2,CheckedListBox2等等。

当CheckedListBox(简称CLB)中的每个项目都是时,应该发生什么 选中,上面的CLB和Label应该将其字体更改为删除线 并将Label.Text修剪为数字,并将其添加到TabPage1.Text。

我遇到的问题是:我检查两个项目是CLB1,CLB和标签是否被触发,TabPage1.Text更改为“第1章 - 1.6”。现在,当我检查CLB2中的 ONE 项时,1.6将被添加到TabPage1.Text,使其成为3.2。我检查的每件物品都会重复。

我想我知道是什么导致了这个问题,但我不知道如何解决这个问题。我想保持代码浓缩,而不是每个CLB都说20个if语句。

我的代码如下,图片已关联。

Form Image

Private Sub CheckedListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged, CheckedListBox2.SelectedIndexChanged
    Dim CLmatches() As Control
    Dim LBmatches() As Control
    For a As Integer = 1 To TabPage1.Controls.Count
        CLmatches = Me.Controls.Find("CheckedListBox" & a, True)
        If CLmatches.Length > 0 AndAlso TypeOf CLmatches(0) Is CheckedListBox Then
            Dim cl As CheckedListBox = DirectCast(CLmatches(0), CheckedListBox)
            If cl.CheckedItems.Count = cl.Items.Count Then
                'CheckBox1.Checked = True
                cl.Font = New Font(cl.Font, cl.Font.Style Or FontStyle.Strikeout)
                LBmatches = Me.Controls.Find("Label" & a, True)
                If LBmatches.Length > 0 AndAlso TypeOf LBmatches(0) Is Label Then
                    Dim lb = DirectCast(LBmatches(0), Label)
                    lb.Font = New Font(lb.Font, lb.Font.Style Or FontStyle.Strikeout)
                    Dim test As String = lb.Text
                    Dim phrase As String = test.Substring(test.IndexOf("+"c) + 1)
                    percentage += phrase
                    TabPage1.Text = "Chapter 1 - " & percentage & "%"
                End If
            End If
        End If
    Next
End Sub
End Class

1 个答案:

答案 0 :(得分:0)

由全局变量(和经典变量)引起的另一个错误

在启动任何此代码之前,应将全局变量 percentage 设置为零。如果您在CheckedListBox上单击多次,则百分比将始终从此行上一个事件中计算的值增加

percentage += phrase

无论其他checklistbox状态如何。
此外,您应该在退出事件处理程序之前将TabPage1.Text设置一次。

Private Sub CheckedListBox1_SelectedIndexChanged(.....)....

    Dim CLmatches() As Control
    Dim LBmatches() As Control
    percentage = 0
    For a As Integer = 1 To TabPage1.Controls.Count
       .....
    Next
    TabPage1.Text = "Chapter 1 - " & percentage & "%"
End Sub

在此模式下,即使取消选中某些检查项

,计算也始终正确

现在无法回答的一点是,您是否真的需要将此变量作为全局类级别的变量。如果可能,尝试避免全局类变量。