2017-02-24 4 views
-1

Ich erstelle eine einfache Anwendung, die es mir ermöglicht, Informationen in einige Textfelder einzugeben und diese nach dem Drücken einer Schaltfläche (Addbtn) zu einer Zeichenfolge zusammenzufassen. Diese Zeichenfolge würde zu einer Checkbox-Liste mit der Bezeichnung ConcernsChk hinzugefügt. Wenn eine oder mehrere dieser Zeichenfolgen abgeschlossen sind, würde der Benutzer auf das entsprechende Kontrollkästchen klicken und auf eine Schaltfläche (CompleteSortBtn) klicken, die diese Zeichenfolge in eine andere Checkbox-Liste überträgt. Das Problem, das ich habe, ist, dass meine Checkbox-Listen-Elemente nicht gemäß ihrem aktivierten Status gelöscht werden. Sie löschen einzeln nacheinander beginnend von oben und nach unten.Durchsuchen von CheckedBoxLists nach aktivierten Kästchen

Hier ist der Code in Frage:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CompleteSortBtn.Click 

    Dim Disposition As String = "" 

    Dim i As Integer 
    If ConcernsChk.CheckedItems.Count > 0 Then 
     For i = 0 To (ConcernsChk.Items.Count - 1) 
      If ConcernsChk.GetItemChecked(i) = True Then 
       Disposition = ConcernsChk.Items(i) 
       DispositionChk.Items.Add(Disposition) 
       ConcernsChk.Items.Remove(Disposition) 
      End If 
     Next 
    Else 
     MessageBox.Show("Please add Concerns before marking them complete.") 
    End If 

Ich erhalte immer ein Fehler ausgelöst, dass ich nicht gleich 3, und ich habe keine Ahnung, was hier zu tun. Dies wird geworfen, ob es 2 Elemente in der Checkbox-Liste oder 10 gibt.

Lange Rede kurzer Sinn, wenn ich die CompleteSortBtn, möchte ich das Programm zu tun 4 Dinge: 1. Suche durch ConcernChk 2. Suchen Sie die Kontrollkästchen 3. Senden die markierten Kästchen zu DispositionChk 4. Löschen Sie die markierten Elemente aus ConcernChk

Ich entschuldige mich für die lange Post und danke Ihnen für die Hilfe, die Sie geben können.

+1

'Ich bekomme immer einen Fehler geworfen, dass ich nicht gleich 3' Es gibt keine solche Fehlermeldung oder Ausnahme. Bitte lies [Ask] und nimm die [Tour]. – Plutonix

+0

Bitte geben Sie den ** vollen ** Fehler an. – Bugs

+0

Eine nicht behandelte Ausnahme vom Typ 'System.ArgumentOutOfRangeException' ist in System.Windows.Forms.dll aufgetreten. Weitere Informationen: InvalidArgument = Wert von '3' ist nicht gültig für 'Index'. –

Antwort

0

Sie durchlaufen Objekte, die nicht checkeditems sind .... count wird anders sein.

Da Sie Elemente aus der Liste entfernen, müssen Sie es auch von unten nach oben tun.

For i = (ConcernsChk.Items.Count - 1) to 0 step - 1 
     If ConcernsChk.Items(i).Checked Then 
      Disposition = ConcernsChk.Items(i) 
      DispositionChk.Items.Add(Disposition) 
      ConcernsChk.Items.RemoveAt(I) 
     End If 
    Next 
+0

Also, wie soll ich den Code so einstellen, dass er die checkeditems durchläuft, sie an eine andere checkedboxlist sendet und die Originale aus der ersten checkedboxlist löscht? –

+0

Also würde ich diesen Code darunter einfügen, was ich bereits habe? Oder würde ich meinen vorherigen Code durch den ersetzen, den Sie hier haben? –

+0

ersetzen Sie Ihre vorhandenen für I-Schleife –

Verwandte Themen