ListBox Items Löschen was nicht ".docx" enthält

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    ListBox Items Löschen was nicht ".docx" enthält

    Ich habe jetzt kein vergleichbares Thema gefunden, habe mir versucht über eine andere Möglichkeit eine Lösung zu basteln aber ich komm leider nicht weiter!

    Mein Versuch:

    Quellcode

    1. Dim i As Integer
    2. While i <> ListBox2.Items.Count
    3. If ListBox2.Items(i).ToString.Contains(".docx") = False Then
    4. ListBox2.Items.RemoveAt(i)
    5. End If
    6. i = i + 1
    7. End While


    Ich möchte in einer Listbox jedes Item in dem der Text .docx nicht vorkommt löschen

    Ich würde mich über andere Lösungsansätze Freuen :)
    Danke schon mal im Voraus
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Hast du die Elemente in einer Liste bevor du sie in die ListBox lädst?
    Wenn ja würde ich die Liste Filtern, am besten mithilfe von Linq (Where oder RemoveAll) :)
    Anschließend würde ich dann die gefilterte Liste in die Listbox laden.
    lg.

    LucaWelker
    @Bluespide

    Danke Dir Funktioniert soweit Gut,
    Hast du noch eine Idee wie ich .doc Raus filtern könnte?
    Da .doc auch in .docx vorhanden ist gibt er mir diese auch aus

    LG Ruerte
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Ruerte schrieb:

    Da .doc auch in .docx vorhanden ist
    String hat da die Methode .EndsWith(...). Außerdem würde ich Dir empfehlen, die Items vorher mit .ToLower() zu vereinheitlichen, falls eine Fatei mal zufällig *.Docx heißt.
    Ansonsten kannst Du, falls Du FileInfo-Objekte in Deiner Listbox hast, die Extension direkt abfragen.
    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!
    @RodFromGermanynullwollte es zwar Ungerne mit .EndsWith nutzen aber hab es jetzt doch verwendet Danke

    @VB1963 Danke für Die Info, aber in meinen Fall hat es noch keine Fehler gemacht lasse Die Schleife jedoch nun trotzdem sogesehen Rückwärts laufen :)

    LG Ruerte
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Ich befürchte, dass in der ListBox von @Ruerte Strings, nicht aber FileInfo-Objekte drin sind.
    Wenn die ListBox ordentlich befüllt wird, tauchen da erst gar keine *.Doc-Objekte auf.
    @Ruerte Wie befüllst Du diese ListBox?
    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!
    *** Lösung ***
    @All Arbeite jetzt jedoch trotzdem mit .EndsWith und eine externe Tabelle mit allen möglichen Datendungen

    Dank Lösungsansatz von @Bluespide

    Quellcode

    1. For Each item As String In New System.Windows.Forms.ListBox.ObjectCollection(New ListBox(), ListBox1.Items)
    2. If Not item.ToLower.EndsWith(" Datenändung zb .docx") Then
    3. ListBox1.Items.Remove(item_docx)
    4. End If
    5. Next


    *** Sonstiges ***
    @LucaWelker
    ich hab auch Daten mit zb. ".doc.zip"".doc.tar"".doc.ccp" habe!
    Den Grund verstehe ich nicht.

    @VB1963 Jop habe Ich bis jetzt noch nicht, habe es Trotzdem schon angepasst Danke :)
    @RodFromGermany Es sind 2 Listboxen ListBox_docx und ListBox_doc zum befüllen:

    Quellcode

    1. Me.Enabled = False
    2. Using arbeits_file As New FolderBrowserDialog()
    3. ListBox_docx.Items.Clear()
    4. ListBox_doc.Items.Clear()
    5. If arbeits_file.ShowDialog() = Windows.Forms.DialogResult.OK Then
    6. TextBox_arbeitsordner.Text = arbeits_file.SelectedPath
    7. For Each dateien As String In My.Computer.FileSystem.GetFiles(TextBox_arbeitsordner.Text)
    8. Me.ListBox_docx.Items.Add(dateien.Replace(TextBox_arbeitsordner.Text & "\", ""))
    9. Me.ListBox_doc.Items.Add(dateien.Replace(TextBox_arbeitsordner.Text & "\", ""))
    10. Next
    11. trennung()
    12. End If
    13. End Using
    14. Me.Enabled = True

    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Ruerte“ ()

    Hi,

    wenn du Code postest, bitte das Highlighting für die entsprechende Sprache einschalten. Statt [code]...[/code] schreib bitte [code=vbnet]...[/code].

    Wieso machst du das befüllen innerhalb der Schleife nicht abhängig davon, ob einer der nicht gewünschten Dateitypen enthalten ist? So wandert der Müll gar nicht erst in die Listbox. Beispiel:

    VB.NET-Quellcode

    1. 'Ganz oben am Anfang deines Codes, noch vor Clas Form1 schreibe noch:
    2. Imports System.Text.RegularExpressions
    3. 'Und hier in der Schleife eben dann gleich ausmisten:
    4. For Each dateien As String In My.Computer.FileSystem.GetFiles(TextBox_arbeitsordner.Text)
    5. If Not RegEx.IsMatch(dateien, "\.(docx?(\.(zip|tar|ccp))?)$", RegExOptions.IgnoreCase) Then
    6. Me.ListBox_docx.Items.Add(dateien.Replace(TextBox_arbeitsordner.Text & "\", ""))
    7. Me.ListBox_doc.Items.Add(dateien.Replace(TextBox_arbeitsordner.Text & "\", ""))
    8. End If
    9. Next


    Link :thumbup:
    Hello World
    @Ruerte
    @All
    Ich bin gerade beim großen Wundern.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim di = New IO.DirectoryInfo("c:\Temp")
    3. Dim l1() = di.GetFiles("*.doc", IO.SearchOption.AllDirectories)
    4. Dim l2() = di.GetFiles("*.docx", IO.SearchOption.AllDirectories)
    5. Me.ListBox1.DataSource = l1
    6. Me.ListBox2.DataSource = l2
    7. End Sub
    Aber das soll so sein.
    Bilder
    • Docx.png

      5,63 kB, 157×179, 243 mal angesehen
    • Docx2.png

      6,54 kB, 300×300, 76 mal angesehen
    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!
    Hi,

    auf der Seite steht ja:

    When using the asterisk wildcard character in a searchPattern (for example, "*.txt"), the matching behavior varies depending on the length of the specified file extension. A searchPattern
    with a file extension of exactly three characters returns files with an
    extension of three or more characters, where the first three characters
    match the file extension specified in the searchPattern. A searchPattern
    with a file extension of one, two, or more than three characters
    returns only files with extensions of exactly that length that match the
    file extension specified in the searchPattern.
    When using the question mark wildcard character, this method returns
    only files that match the specified file extension. For example, given
    two files in a directory, "file1.txt" and "file1.txtother", a search
    pattern of "file?.txt" returns only the first file, while a search
    pattern of "file*.txt" returns both files

    Mit Beispiel darunter:
    The following list shows the behavior of different lengths for the searchPattern parameter:

    "*.abc" returns files having an extension of.abc,.abcd,.abcde,.abcdef, and so on.

    "*.abcd" returns only files having an extension of.abcd.

    "*.abcde" returns only files having an extension of.abcde.

    "*.abcdef" returns only files having an extension of.abcdef.





    Link :thumbup:
    Hello World
    Und im zweiten Hinweis auf der Hilfeseite, der eigentlich die Besonderheiten von Dateinamen mit ~1 und solche Scherze behandeln soll, kann man auch erkennen, warum das so ist:
    Because this method checks against file names with both the 8.3 file name format and the long file name format, a search pattern similar to "*1*.txt" may return unexpected file names. For example, using a search pattern of "*1*.txt" will return "longfilename.txt" because the equivalent 8.3 file name format would be "longf~1.txt".

    Es ist nämlich ganz einfach so, dass das SearchPattern sowohl auf den langen als auch auf den kurzen DOS-8.3-Namen angewendet wird. Und alle Namenserweiterungen länger als 3 Zeichen werden für den 8.3-Namen einfach abgeschnitten. Eine Datei "MeineTolleSeite.html" ist also auch unter (z.B.) "MeineT~1.htm" auffindbar, weshalb die Suche nach "*.html" eben auch Dateien mit der Endung ".htm" auffindet.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Link275 schrieb:

    auf der Seite steht ja:[/quote

    RodFromGermany schrieb:

    Sag ich doch. :D
    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!