我正在努力制作最终幻想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语句。
我的代码如下,图片已关联。
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
答案 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
在此模式下,即使取消选中某些检查项
,计算也始终正确现在无法回答的一点是,您是否真的需要将此变量作为全局类级别的变量。如果可能,尝试避免全局类变量。