2017-08-21 1 views
1

Je n'arrive pas à mettre à jour la liste de sélection lorsque la case est cochée. J'ai un total de 8 cases à cocher "test_location" et je veux que la listbox ajoute des éléments à "Steps_Queue_List" et stocke "1" dans le tableau "Test_Locations" lorsque l'emplacement est coché. Voulez également effacer la liste lorsque la case à cocher est décochée. Cela fonctionne jusqu'à présent mais je préférerais de beaucoup apprendre à faire une boucle pour cela:Visual Basic - Boucle pour mettre à jour la liste de sélection lorsque la case à cocher est cochée

Private Sub Location_CheckBox_1_CheckedChanged(sender As Object, e As EventArgs) Handles Location_CheckBox_1.CheckedChanged 
    If Location_CheckBox_1.Checked Then 
     Test_Locations(0) = 1 
     Steps_Queue_List.Items.Add("test for location" & 1, 1) 

    ElseIf Location_CheckBox_1.Checked = False Then 
     Test_Locations(0) = 0 
     Steps_Queue_List.Items.RemoveAt(0) 
    End If 
End Sub 

Private Sub Location_CheckBox_2_CheckedChanged(sender As Object, e As EventArgs) Handles Location_CheckBox_2.CheckedChanged 
    If Location_CheckBox_2.Checked Then 
     Test_Locations(1) = 1 
     Steps_Queue_List.Items.Add("test for location" & 2, 2) 

    ElseIf Location_CheckBox_2.Checked = False Then 
     Test_Locations(1) = 0 
     Steps_Queue_List.Items.RemoveAt(0) 
    End If 
End Sub 

Private Sub Location_CheckBox_3_CheckedChanged(sender As Object, e As EventArgs) Handles Location_CheckBox_3.CheckedChanged 
    If Location_CheckBox_3.Checked Then 
     Test_Locations(2) = 1 
     Steps_Queue_List.Items.Add("test for location" & 3, 3) 

    ElseIf Location_CheckBox_3.Checked = False Then 
     Test_Locations(2) = 0 
     Steps_Queue_List.Items.RemoveAt(0) 
    End If 
End Sub 

Merci d'avance.

+0

Pourquoi est-ce marqué VB6? – DaveInCaz

Répondre

1

Vous n'avez pas besoin d'une boucle, mais vous pouvez tout gérer en une seule méthode.

Définissez la propriété Tag de vos cases à cocher sur une valeur progressive comprise entre 1 et 8 correspondant à la valeur de texte que vous souhaitez afficher dans les zones de liste.

Configurez ensuite un gestionnaire d'événements qui gère tous les événements CheckBoxChanged pour tous les CheckBox.

Dans ce gestionnaire d'événements récupérer la balise et l'utiliser pour répondre à l'index du tableau et la zone de liste à jour

' Handle all Checkbox changed with the same handler 
Private Sub OnCheckBoxChanged(sender As Object, e As EventArgs) 
Handles Location_CheckBox_1.CheckedChanged,Location_CheckBox_2.CheckedChanged, 
     Location_CheckBox_3.CheckedChanged,Location_CheckBox_4.CheckedChanged, 
     Location_CheckBox_5.CheckedChanged,Location_CheckBox_6.CheckedChanged, 
     Location_CheckBox_7.CheckedChanged,Location_CheckBox_8.CheckedChanged 

    ' Discover which checkbox has been clicked 
    Dim chk = DirectCast(sender, CheckBox) 

    ' Now read the value of the Tag property of that checkbox 
    Dim idx = Convert.ToInt32(chk.Tag) 
    If chk.Checked Then 
     Test_Locations(idx - 1) = 1 
     Steps_Queue_List.Items.Add("test for location" & idx, idx) 
    Else 
     Test_Locations(idx - 1) = 0 
     Steps_Queue_List.Items.RemoveAt(0) 
    End If 
End Sub 
+0

Merci Steve. Qu'est-ce que cela fait ?: dim idx = Convert.ToInt32 (chk.Tag) semble qu'il ne stocke que "0" pour toutes les cases – phillip87

+0

Si vous définissez la propriété Tag à 1,2,3,4,5,6 , 7,8 pour vos huit cases à cocher cela devrait renvoyer l'entier de la propriété Tag de l'objet et vous pouvez utiliser ce numéro pour adresser l'index du tableau Test_Locations et écrire l'élément approprié dans la liste. – Steve

+0

S'il vous plaît revérifier le code, enlevé un étrange Ensuite, après l'autre – Steve