[.NET] ListBox "filtern"

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Cuupa, 20. November 2008 .

Schlagworte:
  1. 20. November 2008
    ListBox "filtern"

    Hi @ all,

    und wieder habe ich eine Frage an euch:

    Und zwar soll die ListBox nach Schlüsselwörtern durchsucht werden und wenn ein Wort mit einem Schlüsselwort übereinstimmt, soll diese Zeile gelöscht werden. Mein Problemkind ist die remove() Methode....ich habe schon aus dem Chip Forum Hilfe bekommen, jedoch funktionieren die Lösungsvorschläge nicht.

    BW ist ehrensache

    von:
    C:\Windows\lol.bat
    C:\ProgrammData\Spybot - Search & Destroy\bla.blubb <-- Keywords, aus LB löschen
    E:\Filme\Film.vid
    D:\Programme\Opera\tmp <-- Keyword, aus LB löschen


    nach:
    C:\Windows\lol.bat
    E:\Filme\Film.vid

    -> wird in logFile.log gespeichert



    Code:
    Imports System.IO
    Imports System.Environment
    
    Public Class Form1
     Inherits System.Windows.Forms.Form
     Dim Pfad
     Dim keywords As String = "Spybot"
     Dim keywordc As String = "comodo"
     Dim keywordt As String = "Tobit"
    
    #Region " Vom Windows Form Designer generierter Code "
     Public Sub New()
     MyBase.New()
    
     ' Dieser Aufruf ist für den Windows Form-Designer 
     ' erforderlich.
     InitializeComponent()
    
     ' Initialisierungen nach dem Aufruf InitializeComponent()
     ' hinzufügen
     
     AddHandler FileSystemWatcher1.Changed, AddressOf OnChanged
     AddHandler FileSystemWatcher1.Created, AddressOf OnChanged
     AddHandler FileSystemWatcher1.Deleted, AddressOf OnChanged
     AddHandler FileSystemWatcher1.Renamed, AddressOf OnRenamed
    
     AddHandler FileSystemWatcher2.Changed, AddressOf OnChanged
     AddHandler FileSystemWatcher2.Created, AddressOf OnChanged
     AddHandler FileSystemWatcher2.Deleted, AddressOf OnChanged
     AddHandler FileSystemWatcher2.Renamed, AddressOf OnRenamed
    
     AddHandler FileSystemWatcher3.Changed, AddressOf OnChanged
     AddHandler FileSystemWatcher3.Created, AddressOf OnChanged
     AddHandler FileSystemWatcher3.Deleted, AddressOf OnChanged
     AddHandler FileSystemWatcher3.Renamed, AddressOf OnRenamed
    
    
    
     End Sub
     '...
    #End Region
    
     Private sLogFile As String = "K:\$log\" & Date.Now.Date & "\logFile.log"
    
     Sub OnChanged(ByVal source As Object, ByVal e As _
     FileSystemEventArgs)
     ListBox1.Items.Add(e.ChangeType.ToString & ": " & _
     e.FullPath & " " & DateTime.Now.ToString)
     ListBox1.SelectedIndex = ListBox1.Items.Count - 1
     End Sub
    
     Sub OnRenamed(ByVal source As Object, ByVal e As _
     RenamedEventArgs)
     ListBox1.Items.Add(e.ChangeType.ToString & ": " & _
     e.OldFullPath & vbNewLine & _
     " neuer Name: --> " & e.FullPath & " " & _
     DateTime.Now.ToString)
     ListBox1.SelectedIndex = ListBox1.Items.Count - 1
     End Sub
    
     Private Sub StartWatchingC()
     FileSystemWatcher1.Path = "C:\"
     FileSystemWatcher1.NotifyFilter = _
     (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or _
     NotifyFilters.FileName Or NotifyFilters.DirectoryName)
     FileSystemWatcher1.IncludeSubdirectories = True
    
     Dim pattern As String = TextBox2.Text
     If pattern = "*" Or pattern = "*.*" Then
     pattern = ""
     End If
     FileSystemWatcher1.Filter = pattern
     FileSystemWatcher1.EnableRaisingEvents = True
     ListBox1.Items.Clear()
     ListBox1.Items.Add(DateTime.Now.ToString)
     ListBox1.Items.Add("Überwachung beginnt...")
     ListBox1.Items.Add("-----------------------------------------")
    
     End Sub
    
    
     Private Sub StartWatchingD()
     FileSystemWatcher2.Path = "D:\"
     FileSystemWatcher2.NotifyFilter = _
     (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or _
     NotifyFilters.FileName Or NotifyFilters.DirectoryName)
     FileSystemWatcher1.IncludeSubdirectories = True
     Dim pattern As String = TextBox2.Text
     If pattern = "*" Or pattern = "*.*" Then
     pattern = ""
     End If
     FileSystemWatcher2.Filter = pattern
     FileSystemWatcher2.EnableRaisingEvents = True
    
     End Sub
    
     Private Sub StartWatchingE()
     FileSystemWatcher3.Path = "E:\"
     FileSystemWatcher3.NotifyFilter = _
     (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or _
     NotifyFilters.FileName Or NotifyFilters.DirectoryName)
     FileSystemWatcher1.IncludeSubdirectories = True
     Dim pattern As String = TextBox2.Text
     If pattern = "*" Or pattern = "*.*" Then
     pattern = ""
     End If
     FileSystemWatcher3.Filter = pattern
     FileSystemWatcher3.EnableRaisingEvents = True
     
     End Sub
    
    
    
     Private Sub SaveListbox(ByVal ListBox As ListBox, _
     ByVal sFile As String)
     Dim stream As IO.StreamWriter
     Dim i As Short
    
     stream = New IO.StreamWriter(sFile)
     For i = 0 To CShort(ListBox.Items.Count - 1)
     stream.WriteLine(ListBox.Items(i))
     Next
     stream.Close()
     End Sub
    
     Private Sub copyLog()
     If My.Computer.FileSystem.FileExists("C:\" & Date.Now.Date & "\logFile.log") And My.Computer.FileSystem.FileExists("K:\$log" & Date.Now.Date & "\") = True Then
     My.Computer.FileSystem.CopyFile("C:\" & Date.Now.Date & "\logFile.log", "K:\$log" & Date.Now.Date & "\")
     Else
     Exit Sub
     End If
     End Sub
    
     Private Sub checkDrive()
     If My.Computer.FileSystem.DirectoryExists("K:\") = False Then
     Pfad = "C:\" & Date.Now.Date & "\"
     Else
     Exit Sub
     End If
     End Sub
    
     Private Sub createDir()
     If My.Computer.FileSystem.DirectoryExists(Pfad) = False Then
     My.Computer.FileSystem.CreateDirectory("K:\$log\" & Date.Now.Date & "\")
     Else
     Exit Sub
     End If
     End Sub
    
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
     Pfad = "K:\$log\" & Date.Now.Date & "\logFile.log"
    
     checkDrive()
     copyLog()
     createDir()
    
    
     StartWatchingC()
     StartWatchingD()
     StartWatchingE()
    
     sort()
    
     
    
     End Sub
    
     Private Sub Form1_Closing(ByVal sender As Object, _
     ByVal e As System.ComponentModel.CancelEventArgs) _
     Handles MyBase.Closing
     SaveListbox(ListBox1, sLogFile)
     End Sub
    
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
     SaveListbox(ListBox1, sLogFile)
     End Sub
    
     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     SaveListbox(ListBox1, sLogFile)
     End Sub
    
    
    
    
     Private Sub sort()
     remove("Spybot")
     remove("comodo")
     remove("tobit clipinc")
     remove("opera")
     End Sub
    
     Private Sub remove(ByVal such As String)
     Dim I As Integer
     Dim ende As Integer = ListBox1.Items.Count
     Do While I < ende
     If ListBox1.Items(I).ToString.IndexOf(such, comparisonType:=StringComparison.CurrentCultureIgnoreCase) > -1 Then
     ListBox1.Items.RemoveAt(I)
     ende = ende - 1
     Else
     I = I + 1
     End If
     Loop
     End Sub
    
    
    End Class
    
     
  2. 20. November 2008
    AW: ListBox "filtern"

    Dummerweise ist mein VB ein wenig eingerostet...

    Aber das ganze dürfte relativ simple mit RegEx´es zu realisieren sein.


    die einfachste Lösung wäre wenn du genau weißt WIE dein LB eintrag aufgebaubt ist , wenn dieser immer derselbe ist : http://www.txt2re.com/index-perl.php3 und voilá

    Andernfalls musst du dir selber ein RegEx pattern schreiben und jedes LB Item untersuchen.
    Z.b. : \.*[SpyBot.blub]\.* würde alles als "True" zurückgeben in dem die Zeichenfolge vorkommt (wenn vorne und hinter der Zeichenfolge noch zeichen sind.)

    Hoffe das warn schubs in die richtige richtung ^^ mfg, inqui
     
  3. 20. November 2008
    AW: ListBox "filtern"

    Also ich habe mal ne ListBox wie von dir beschrieben nachgestellt. Und wenn ich meine remove-Methode aus dem letzten Thread (die du ja hier noch drin hast) mit den Schlüsselwörtern aufrufe, löscht er diese Einträge auch ordnungsgemäß.
    Liegt's vllt daran dass du sort() nur einmal beim Laden der Form aufrufst?
     
  4. 20. November 2008
    AW: ListBox "filtern"

    jaaaaaaaaaaa!!! Es funktioniert
    danke!

    Es hat tatsächlich daran gelegen das sort() nur einmal ausgeführt wird.

    //edit: solved und closed
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.