2017-06-07 8 views
0

私はファイナルファンタジーX - 2のための進捗チェックリストを作成しようとしています。私はそれが必要ではないときにコードのループ、タイトルで説明するのは難しい

私は何を持っていることはこれです:

ラベル名 "ルカ - 1.6は、" LABEL1です。その下にCheckedListBox1、Label2、CheckedListBox2などがあります。

にCheckedListBox(略してCLB)内のすべての項目が あるとき、CLB、チェックされて起こると、それは を取り消し線とするだけで数Label.Textをトリミングしていることを追加するために変更され、フォントの持っている必要があります上記のラベルを付けておくべきことTabPage1.Textに追加します。

問題は、CLB1、CLB、ラベルの両方がチェックアウトされていることを確認し、TabPage1.Textが「Chapter 1- 1.6」に変更されていることです。今度はONEアイテムをCLB2にチェックすると、TabPage1.Textに1.6が追加され、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 

答えて

0

グローバル変数(やクラシック1)によって引き起こされる別のバグ

あなたはこのコードのいずれかを開始する前にゼロにグローバル変数割合を設定する必要があります。あなたはCheckedListBoxesを複数回クリックした場合、あなたの割合は関係なく、常に他にCheckedListBoxの状態が何であるかのこのラインで前のイベントで

percentage += phrase 

を計算した値から増加します。
また、イベントハンドラを終了する前にTabPage1.Textを1回だけ設定する必要があります。このモードでは

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 

Calcは、あなたのcheckeditemsの一部

のチェックを外しても、あなたは本当にこの変数はグローバルクラスレベル1である必要があれば、今お答えすることはできません点は常に正しいです。可能であれば、グローバルなクラス変数を避けてみてください。

+0

私はこれを試してみることができました。 –

関連する問題