Ausgewähltes ComboboxItem aus Textdatei löschen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Skaletti.

    Ausgewähltes ComboboxItem aus Textdatei löschen

    Guten Abend!
    Ich fülle eine Combobox mit Werten aus einer Textdatei. Funzt
    Jetzt möchte ich den ausgewählten ComboBoxItem nach der Übergabe an die Textbox aus der Textdatei löschen.
    Hier mein Versuch.
    Im Moment wird aber nur der ausgewählte Wert aus der cbo gelöscht.
    Ist es den überhaupt möglich den ausgewählten cbo Wert aus der txt zu löschen??
    Gruß Ulli!

    Quellcode

    1. 'Combobox füllen aus Textdatei, funzt.
    2. Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Dim sr As New System.IO.StreamReader("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt", _
    4. System.Text.Encoding.Default)
    5. ' alle Zeilen der Datei laden
    6. Do While Not sr.EndOfStream
    7. cboStartnummern.Items.Add(sr.ReadLine)
    8. Loop
    9. sr.Close()
    10. End Sub
    11. 'Wert übergeben in TextBox
    12. Private Sub cboStartnummern_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboStartnummern.SelectedIndexChanged
    13. Startnummer_TextBox.Text = cboStartnummern.Text
    14. 'ausgewähltes ComboboxItem soll aus Textdatei gelöscht werden
    15. cboStartnummern.Items.RemoveAt(CInt("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt" & cboStartnummern.Text))
    16. 'Fehler:Ungültige Konvertierung von der Zeichenfolge C:\ usw.
    17. End Sub

    SystemUnknow schrieb:

    Wiederholle noch eine mal die Grundlagen.
    Wir sind hier in den Grundlagen. :D
    @Skaletti: Du musst die Datei auslesen, da hast Du deren Inhelt in einem String. Diesen kannst Du (möglicherweise) in einen Integer konvertieren, und das kommunizierende Item löschen.
    Und für alle Fälle gib Deinem Programm Option Strict On
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielleicht kannst du ja auch mal andeuten, warum die Items aus der Textdatei gelöscht werden sollen. Dann kann man sich Gedanken über Alternativlösungen machen.
    Meine Idee:
    Du willst die Startnummern aus der Textdatei löschen. Löschst du sie dann nach Übertragung von der Combo in die Textbox auch aus den Combo.Items (sonst kann ja der User eine bereits gelöschte Startnummer nochmal aufrufen)? Falls das so ist, wäre mein Vorschlag: Vergiss erstmal die Textdatei, entferne die Startnummern nach Benutzung aus der Combo-Auflistung und am Ende überträgst du die die übrig gebliebenen Startnummern per Streamwriter in die Textdatei, wobei du die alten Startnummernwerte überschreibst.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    @Marsianer:
    Du bringst mich da auf ein Verständnisproblem:
    @Skaletti:
    Willst Du aus den Zeilen, die in Deiner Textdatei stehen, die 13. und die 17. Zeile (oder so) löschen?
    Oder
    Steht in der Textdatei eine 13 (oder so) und Du willst von Deiner Compobox die 13. Zeile löschen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Du bringst mich da auf ein Verständnisproblem:

    Eben. Für die Problemlösung ist es wichtig, warum die Werte inner Textdatei stehen. Geht es nur darum, vorgegebene Startwerte zu persistieren, die immer wieder so gebraucht werden, oder werden die Startwerte von woanders her als Textdatei geliefert? Und geht es darum, bestimmte Startwerte zu löschen oder bestimmte Positionen in der Textdatei?
    Ich habe den leisen Verdacht (der nicht stimmen muss), dass eine Textdatei nicht die beste Lösung für die Speicherung der Startwerte ist. Eventuell könnte man das besser über XML oder so machen. Aber das hängt nun echt vom Sinn der ganzen Aktion ab.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D

    Marsianer schrieb:

    Für die Problemlösung ist es wichtig, warum die Werte inner Textdatei stehen.

    Mhh... Nein. Es ist doch klar was er hier machen will und wo der Fehler liegt.

    @TE Arbeite mit ner List(Of String), sollte einiges erleichtern.
    Hallo,
    erstmal vielen Dank an alle für Vorschläge und Tips.
    Wenn in der Textdatei der ausgewählte ComboboxItem gelöscht wird, kann der User sie ja nicht nochmal aufrufen.
    "Option Strict On" steht oben an.

    "Arbeite mit ner List(Of String), sollte einiges erleichtern."
    Habe ich gemacht, der ausgewählte cbo Eintrag wird jetzt in der txt gelöscht.
    Allerdings nur wenn jedesmal die Form einmal geschlossen wird.
    Kann man da noch was ändern?
    Gruß Ulli!

    Quellcode

    1. Dim lines As System.Collections.Generic.List(Of String) _
    2. = System.Text.RegularExpressions.Regex.Split _
    3. (My.Computer.FileSystem.ReadAllText("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt"), vbCrLf).ToList
    4. lines.RemoveAt(0)
    5. My.Computer.FileSystem.WriteAllText("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt", String.Join(vbCrLf, lines.ToArray), False)
    Hi,
    So funzt es jetzt.
    Combo.Item auch löschen.
    Gruß Ulli!

    Quellcode

    1. Dim lines As System.Collections.Generic.List(Of String) _
    2. = System.Text.RegularExpressions.Regex.Split _
    3. (My.Computer.FileSystem.ReadAllText("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt"), vbCrLf).ToList
    4. lines.RemoveAt(0)
    5. My.Computer.FileSystem.WriteAllText("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt", String.Join(vbCrLf, lines.ToArray), False)
    6. cboStartnummern.Items.Remove(cboStartnummern.SelectedItem)
    Mhh ja der Code sieht immer noch schrecklich aus.

    Besser:

    VB.NET-Quellcode

    1. Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt")
    2. lines.RemoveAt(0)
    3. System.IO.File.WriteAllLines("C:\Dokumente und Einstellungen\Administrator\Desktop\Startnummern.txt", lines)
    4. cboStartnummern.Items.Remove(cboStartnummern.SelectedItem)