#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren