Checkedlistbox mehrere Markierte Einträge in einer weiteren Checkedlistbox

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RajYuJin.

    Checkedlistbox mehrere Markierte Einträge in einer weiteren Checkedlistbox

    Guten Abend Comm =)

    ich hab schon wider eine kleine frage..

    Ich möchte Markierte (angehäckelte) einträge, von Checkedlistbox1 auf Checkedlistbox2 übertragen, und im gleichen zug,

    die "verschobenen Einträge" in Checkedlistbox1 löschen.
    Da ich viel mit büchern arbeite, habe ich in diesem buch "Visual Basic 2010 Grundlagen und Profiwissen" gelernt das dies so geht:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickFor i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
    2. CheckedListBox2.Items.Add(CheckedListBox1.CheckedItems(i))While CheckedListBox1.CheckedItems.Count > 0
    3. CheckedListBox1.Items.RemoveAt(CheckedListBox1.CheckedIndices(0))
    4. End While
    5. NextEnd Sub


    so das ganze funktioniert auch, solange ich nur einzelne Markiere.. sobald ich mehrere markiere krieg ich eine Fehlermeldung
    und der Debugmode geht in Pause position..

    Da meine bücher nicht sprechen können, hoffe ich das jemand von euch mir helfen kann.. :)

    Cheers RajYuJin
    Ich weiss wo dein Problem liegt. Nehmen wir an wir haben 3 Einträge (a, b und c). Du markierst "b" und "c" und klickst auf den Button.
    Also hat nun "a" den Index 0, "b" den Index 1 und "c" den Index 2. Dein Programm löscht den ersten erledigten Punkt "b" (Index 1). Und zag ist der Eintrag weg.
    Nun hat "a" den Index 0 und "c" den Index1. Nun kommt dein Programm und möchte "c" löschen (Hatte vorher den Index 2). Halt, Index 2 existriert ja gar nicht mehr --> IndexOutOfRangeException (Index nicht gefunden).

    Problemlösung? Einfach rückwärts anfangen (also von "c" nach "a"). Dann gibt's bestimmt keine Fehler mehr ;)

    VB.NET-Quellcode

    1. For idx As Integer = CheckedListBox1.CheckedItems.Count - 1 To 0 Step -1
    2. CheckedListBox2.Items.Add(CheckedListBox1.CheckedItems(idx))
    3. CheckedListBox1.Items.RemoveAt(CheckedListBox1.Items.IndexOf(CheckedListBox1.CheckedItems(idx)))
    4. Next


    Konnte deinen Code sogar noch kürzer. Hoffe das hilft dir weiter.

    Grüsse Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dancger“ () aus folgendem Grund: Schreibfehler FTW!

    RajYuJin schrieb:

    naja haetten die hier im buch auch mal schreiben dürfen :P
    Wieso sollten sie? Du wolltest die markierten verschieben, sie hingegen nur seperat anzeigen :rolleyes:

    Könntest du noch unten rechts auf "Erledigt" drücken, sofern dein Problem gelöst ist? ;)

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...