Listbox mehrfachauswahl zum String

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Gottric.

    Listbox mehrfachauswahl zum String

    Hallo,
    kurze Frage an euch. Erst zum Hintergrund, ich will den Inhalt von Textdateien überschreiben. Ich lade mir alle Datein in eine Listbox ein und dann und habe ein Textfeld nebendran angebracht in der der zu übernehmende Inhalt steht. Jetzt möchte ich gerne dass alle Datein die ich anwähle mit dem Inhalt überschreiben werden. Bei mir, egal wie ich es versuche schreibt er immernur die zuerst ausgewählte Datei.

    VB.NET-Quellcode

    1. Private Sub btnersetzen_Click(sender As Object, e As EventArgs) Handles btnersetzen.Click
    2. If txtersetzen.Text = "" Then
    3. MsgBox("Kein Inhalt im Textfeld!", MsgBoxStyle.Critical, "Fehler")
    4. Else
    5. Select Case MsgBox(("Es wird der Inhalt aller ausgewählten Dateien überschrieben!" & vbCrLf & vbCrLf & "Sind sie sich wirklich sicher?"), MsgBoxStyle.YesNo, "Abfrage")
    6. Case MsgBoxResult.Yes
    7. 'MsgBox(Pfadprg21 + ListBox1.SelectedItems.ToString + ".dat")
    8. IO.File.WriteAllLines((Pfadprg21 + ListBox1.SelectedItem + ".dat"), txtersetzen.Lines)
    9. Case MsgBoxResult.No
    10. End Select
    11. End If
    12. End Sub


    Hat jemand ne Idee?
    Du musst natürlich eine Schleife durch alle ausgewählten Elemente der ListBox machen und dann jeweils WriteAllLines ausführen. Im Moment schreibst du eindeutig nur eine Datei.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ich bin kein .NET-Experte, aber das dürfte ungefähr so aussehen (ist eher als Pseudocode(!) anzusehen):

    VB.NET-Quellcode

    1. Case MsgBoxResult.Yes
    2. dim i as integer
    3. for i = 0 to ListBox1.count-1
    4. if ListBox1.items(i).selected then
    5. IO.File.WriteAllLines((Pfadprg21 + ListBox1.items(i)+ ".dat"), txtersetzen.Lines)
    6. end if
    7. next i
    8. Case MsgBoxResult.No

    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Eine List(Of FileInfo) als Datenquelle wäre zwar der Königsweg, für den Anfang würde aber das mal funktionieren (wie Marcus dir schon empfohlen hat):

    For i As Integer = 0 To ListBox1.Items.Count()-1

    IO.File.WriteAllLines((Pfadprg21 & ListBox1.SelectedItem(i).ToString() & ".dat"), txtersetzen.Text)

    Next

    Edit: Index vergessen :)

    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mrMo“ ()

    OK, machen wir es richtig:
    @Gottric In die ListBox packst Du FileInfo-Elemente, die bekommst Du so:

    VB.NET-Quellcode

    1. Dim fi() = New IO.DirectoryInfo("c:\Temp").GetFiles("*.txt", IO.SearchOption.AllDirectories)
    2. Me.ListBox1.DataSource = fi
    Die Verarbeitung der Auswahl geht dann so:

    VB.NET-Quellcode

    1. For Each item In Me.ListBox1.SelectedItems
    2. Dim fi = DirectCast(item, IO.FileInfo)
    3. IO.File.WriteAllText(fi.FullName, "bla")
    4. Next
    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!
    Hallo, ich hab nen Code aber noch ne Frage dazu.
    was bedeutet Option Strict On lässt kein spätes binden zu?

    hier der Code:

    VB.NET-Quellcode

    1. Select Case MsgBox(("Es wird der Inhalt aller ausgewählten Dateien überschrieben!" & vbCrLf & vbCrLf & "Sind sie sich wirklich sicher?"), MsgBoxStyle.YesNo, "Abfrage")
    2. Case MsgBoxResult.Yes
    3. For i As Integer = 0 To ListBox1.Items.Count() - 1
    4. If ListBox1.Items(i).selected Then
    5. IO.File.WriteAllLines((Pfadprg21 & ListBox1.SelectedItem(i).ToString() & ".dat"), txtersetzen.Text)
    6. End If
    7. Next
    8. End Select


    Was muss ich denn abändern dass es passt?
    @Gottric Du kannst die selektierten Items direkt abfragen, das hatten wir bereits in Post #6.:

    VB.NET-Quellcode

    1. For Each item In Me.ListBox1.SelectedItems
    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!
    @Gottric Diese Schleife ist mit Deiner äquivalent.

    VB.NET-Quellcode

    1. For Each item In Me.ListBox1.SelectedItems
    2. IO.File.WriteAllLines((Pfadprg21 & item.ToString() & ".dat"), txtersetzen.Text)
    3. Next
    Was hast Du für Probleme mit dem Zusammensetzen?
    Wie sieht es aus, wie soll es aussehen?
    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!
    Hallo,
    so funktioniert der Code Top. Wenn ihr nen Fehler endeckt den ich übersehe trotz dass die Anwendung sauber arbeitet wäre ich froh ihr teilt mir das mit.

    Hier lade ich die Daten in die Listbox:

    VB.NET-Quellcode

    1. Private Sub btnDateienladen_Click(sender As Object, e As EventArgs) Handles btnDateienladen.Click
    2. If ListBox1.Items.Count > 1 Then
    3. ListBox1.Items.Clear()
    4. Else
    5. If rbtnPrg.Checked = True Then
    6. If ComboBox1.SelectedIndex = -1 Then
    7. MsgBox("Es muss ein Roboter ausgewählt werden!", MsgBoxStyle.Critical, "Fehler")
    8. Else
    9. Dim selectedItem As Object
    10. selectedItem = ComboBox1.SelectedItem
    11. If selectedItem.ToString() = "Roboter 2.1" Then
    12. Dim fInfo21 = New IO.DirectoryInfo(Pfadprg21).GetFiles("*.dat", IO.SearchOption.AllDirectories)
    13. For Each fi21 In fInfo21
    14. ListBox1.Items.Add(fi21.Name.Replace(fi21.Extension, ""))
    15. Next
    16. End If
    17. End If
    18. End If
    19. End If
    20. End Sub


    Und hier werden jetzt alle ausgewählten Daten aus der Listbox mit dem Text auf dem dafür bereitgestellten Textfeld überschrieben:

    VB.NET-Quellcode

    1. Private Sub btnersetzen_Click(sender As Object, e As EventArgs) Handles btnersetzen.Click
    2. If txtersetzen.Text = "" Then
    3. MsgBox("Kein Inhalt im Textfeld!", MsgBoxStyle.Critical, "Fehler")
    4. Else
    5. Select Case MsgBox(("Es wird der Inhalt aller ausgewählten Dateien überschrieben!" & vbCrLf & vbCrLf & "Sind sie sich wirklich sicher?"), MsgBoxStyle.YesNo, "Abfrage")
    6. Case MsgBoxResult.Yes
    7. For Each item In ListBox1.SelectedItems
    8. IO.File.WriteAllLines((Pfadprg21 & item.ToString() & ".dat"), txtersetzen.Lines)
    9. Next
    10. Case MsgBoxResult.No
    11. End Select
    12. End If
    13. End Sub
    @Gottric Wenn Du Deine If-Anweisungen weniger verschachteln würdest, könntest Du den Code ganz easy verfolgen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btnDateienladen_Click(sender As Object, e As EventArgs) Handles btnDateienladen.Click
    2. If ListBox1.Items.Count > 1 Then
    3. ListBox1.Items.Clear()
    4. Return
    5. End If
    6. If Not rbtnPrg.Checked = True Then
    7. Return
    8. End If
    9. If ComboBox1.SelectedIndex = -1 Then
    10. MsgBox("Es muss ein Roboter ausgewählt werden!", MsgBoxStyle.Critical, "Fehler")
    11. Return
    12. End If
    13. Dim selectedItem = ComboBox1.SelectedItem.ToString()
    14. If selectedItem = "Roboter 2.1" Then
    15. Dim fInfo21 = New IO.DirectoryInfo(Pfadprg21).GetFiles("*.dat", IO.SearchOption.AllDirectories)
    16. For Each fi21 In fInfo21
    17. ListBox1.Items.Add(fi21.Name.Replace(fi21.Extension, ""))
    18. Next
    19. End If
    20. End Sub
    21. Private Sub btnersetzen_Click(sender As Object, e As EventArgs) Handles btnersetzen.Click
    22. If txtersetzen.Text = "" Then
    23. MsgBox("Kein Inhalt im Textfeld!", MsgBoxStyle.Critical, "Fehler")
    24. Return
    25. End If
    26. If MsgBox(("Es wird der Inhalt aller ausgewählten Dateien überschrieben!" & vbCrLf & vbCrLf & "Sind sie sich wirklich sicher?"), MsgBoxStyle.YesNo, "Abfrage") = MsgBoxResult.Yes Then
    27. For Each item In ListBox1.SelectedItems
    28. IO.File.WriteAllLines((Pfadprg21 & item.ToString() & ".dat"), txtersetzen.Lines)
    29. Next
    30. End If
    31. End Sub
    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!

    Gottric schrieb:

    was bewirkt dieses "return"


    Das beendet die Methode ohne das der Rest vom Code danach ausgeführt wird.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen