vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Listbox bestimme Items löschen 
Autor: b0tter
Datum: 28.10.12 19:01

Soo Leute,
ich lese aus einer Textdatei Wörter aus, die ich dann in eine Listbox (Listbox2) einfüge.
Diese Textdatei sieht immer anders aus, aber in dieser Struktur:
Hallo
ich
bin
es
tag

Nun habe ich die andere Listbox (Listbox1), die sowas enthält:

Hallo = Tschüss
du = hi
bin = weg
tag = blabla
es = ist
hallo = hi

Ich möchte nun alle Items in Listbox1 löschen, die die Wörter in Listbox2 enthalten.

Wie mache ich das ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: keco
Datum: 28.10.12 19:37

Kommt darauf an, wie die Daten in der ListBox1 vorliegen. Jeweils als einzelner String? Dann iterierst du durch alle Elemente von ListBox1 und schaust, ob das Item mit dem gesuchten Wort anfängt. Wenn ja, dann löschst du es.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: Manfred X
Datum: 28.10.12 23:54

Hallo!

Benutze keine Controls für die Daten-Aufbewahrung.

    Private Sub test1()
 
 
        Dim text As String = "Hallo. Ich bin es. Oder bin ich es nicht?"
 
        'Satzzeichen aus dem Text entfernen
        text = text.Replace(".", "") : text = text.Replace("?", "")
 
        'Text in eine Liste von Worten aufspalten
        Dim wordlist As New List(Of String)(text.Split(" "c))
 
        'Ersetz-Liste
        Dim replacelist As New List(Of String)
        With replacelist
            .Add("Hallo = Tschüss")
            .Add("du = hi")
            .Add("bin = weg")
            .Add("Tag = blabla")
            .Add("es = ist")
            .Add("hallo = hi")
        End With
 
        'StartsWith-Stringvergleich
        Dim swc As New startswithcomparer
 
        'Ersetz-Liste anhand der Wort-Liste kürzen ...
        For i As Integer = replacelist.Count - 1 To 0 Step -1
            If wordlist.Contains(replacelist(i), swc) Then
                replacelist.RemoveAt(i)
            End If
        Next i
 
        'Listenbindung an Listbox-Control
        ListBox1.DataSource = replacelist
 
    End Sub
 
 
    Public Class startswithcomparer
        Inherits EqualityComparer(Of String)
 
        Public Overloads Overrides Function Equals(x As String, y As String) As _
          Boolean
            If y.Trim.ToUpper.StartsWith(x.Trim.ToUpper) Then Return True
            Return False
        End Function
 
        Public Overloads Overrides Function GetHashCode(obj As String) As _
          Integer
            Return obj.GetHashCode
        End Function
    End Class
Eventuell beim Vergleich noch ein " =" anhängen.

Beitrag wurde zuletzt am 29.10.12 um 00:01:33 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 29.10.12 11:44

@ Manfred X
Das ist leider nicht das, was ich suche. Die Items in Listbox1 und Listbox2 ändern sich ständig.
Nun möchte ich die Items von Listbox1 löschen, die die Listbox2 enthält. Das heißt, wenn Listbox2 das Item "Hallo" enthält, soll in Listbox1 das Item "Hallo = du" gelöscht werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: Manfred X
Datum: 29.10.12 12:11

Hallo!

Trage die Daten in Listen ein und binde diese Listen an die Boxen.
Du kannst z.B. auch Bindinglist aus System.Componentmodel nutzen.

Was verstehst Du unter "ändern sich ständig"?
Wie werden diese Listen befüllt?

Ich übertrage die Worte des Textes in eine Wortliste (- wie Du das
im einzelnen realisieren mußt, hängt von Deinem Textmaterial ab.)

Danach wird die Replaceliste (entspricht Listbox1) durchgegangen und alle Einträge
werden gestrichen, die Startstrings enthalten, die in der Wortliste (entspricht
Listbox2) stehen.

In meinem Beispiel stehen in der Replacelist nur noch die Einträge
"du = hi" und "Tag = blabla".
Beide "Hallo =", dazu "bin = weg" und "es = Tag" fliegen raus, weil die
Worte "Hallo", "bin" und "es" im Text enthalten sind.

Suchst Du eine Routine, die auf Änderungen eines Eintrags in einer
der beiden Listen automatisch reagiert und ggf. Streichungen vornimmt??
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 29.10.12 12:40

Die Listbox1 wird von einer Datei vom FTP-Server gefüllt.
Listbox2 hat dieselben Items wie Listbox1 zu Anfang (Ich klone)
Ich stelle mir sowas wie eine Favoritenliste vor.
In Listbox1 sind alle Wörter (Keine Sätze) inklusive " = anderer Text".
Ich kopiere alle Items aus Listbox1 zu Listbox2. In Listbox 2 lösche ich nun alle Items, die Wörter aus der Textdatei (Listbox3) enthalten.
Die Wörter (untereinander), sind mir nicht bekannt, da sie jeder Benutzer selbst ändert (Er muss aber auch garkeine eingeben).

Hab jetzt noch Listbox3 erwähnt, war aber vorhin nicht so wichtig.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: keco
Datum: 29.10.12 18:52

Meine Beiträge müssen in letzter Zeit unsichtbar sein. Was ist denn mit meinem Vorschlag?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 29.10.12 19:46

@ keco
Nein, nicht als einzelner String.
Ich könnte zwar eine "Suche" einstellen, wie hier (Keine saubere Lösung):

For i As Integer = 0 To ListBox7.Items.Count - 1
For a As Integer = 0 To ListBox8.Items.Count - 1
If ListBox7.Items.Item(i).ToString = ListBox8.Items.Item(a).ToString Then
ListBox7.SelectedItem = ListBox8.Items.Item(a).ToString
ListBox7.Items.Remove(ListBox7.SelectedItem)
Else
If ListBox7.Items.Item(i).ToString.Contains(ListBox8.Items.Count - 1) Then
ListBox7.SetSelected(i, True)
ListBox7.Items.Remove(ListBox7.SelectedItem)
End If
End If
Next
Next

... aber es funktioniert nicht und ich weil, dass es an den schleifen liegt, wie mach ich das dann aber ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: keco
Datum: 29.10.12 19:51

Du wirst die Schleifen rückwärts durchlaufen lassen müssen. Dadurch, dass du vorne ein Item aus der Auflistung entfernst, rutschen die nachfolgenden nach oben und das bringt den Vorgang durcheinander, daher rückwärts.

Das wäre aber grundsätzlich eine Idee, wenn du die Items einfach so hinzufügst. Am einfachsten wäre es aber, wenn die Daten aus eigenen Klassen kämen, die zwei Felder aufweisen: eines für den Wert vor dem Gleichheitszeichen, eines für den Wert nach dem Gleichheitszeichen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 29.10.12 21:03

@ keco
Was meinst du mit Punkt 2 ?
achja, oben habe ich etwas falsch gemacht:
ListBox7.SetSelected(i, True)
ListBox7.Items.Remove(ListBox7.SelectedItem)

Statt Remove:
Listbox9.Items.Add(Listbox7.SelectedItem)

Macht aber keinen großen Unterschied.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: keco
Datum: 29.10.12 21:17

Irgendwie sowas (ich habs nicht wirklich getestet):
Public Class Form1
    Public Sub New()
        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()
 
        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf 
        ' hinzu.
 
        ListBox1.Items.Add(New MyListBoxData("Hallo", "Tschüss"))
        ListBox1.Items.Add(New MyListBoxData("du", "hi"))
        ListBox1.Items.Add(New MyListBoxData("bin", "weg"))
        ListBox1.Items.Add(New MyListBoxData("Tag", "blabla"))
        ListBox1.Items.Add(New MyListBoxData("es", "ist"))
        ListBox1.Items.Add(New MyListBoxData("hallo", "hi"))
    End Sub
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
      Handles Button1.Click
        Dim text() As String = New String() {"Hallo", "ich", "bin", "es", "Tag"}
 
        For i As Integer = 0 To text.Length - 1
            For j As Integer = ListBox1.Items.Count - 1 To 0 Step -1
                If TypeOf ListBox1.Items(j) Is MyListBoxData Then
                    Dim item As MyListBoxData = CType(ListBox1.Items(j), _
                      MyListBoxData)
 
                    If item.LeftSide = text(i) Then
                        ListBox1.Items.RemoveAt(j)
                    End If
                End If
            Next
        Next
    End Sub
End Class
 
Public Class MyListBoxData
    Public Sub New(left As String, right As String)
        _LeftSide = left
        _RightSide = right
    End Sub
 
    Property LeftSide As String
    Property RightSide As String
 
    Public Overrides Function ToString() As String
        Return Me.LeftSide & " = " & Me.RightSide
    End Function
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 29.10.12 21:34

@ keco

ListBox1.Items.Add(New MyListBoxData("Hallo", "Tschüss"))
ListBox1.Items.Add(New MyListBoxData("du", "hi"))
ListBox1.Items.Add(New MyListBoxData("bin", "weg"))
ListBox1.Items.Add(New MyListBoxData("Tag", "blabla"))
ListBox1.Items.Add(New MyListBoxData("es", "ist"))
ListBox1.Items.Add(New MyListBoxData("hallo", "hi"))

Und Dim Text as string ("Hallo", blabla)
Ich weiß die Wörter nicht ! Ich habe nur die Listboxen, in denen die unbekannten Wörter stehen !
Dieses Hallo war ein Beispiel für irgendwas.

Wie mach ich das ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: keco
Datum: 29.10.12 21:36

Das hat Manfred angesprochen. Die Daten kommen doch von irgendwo her. Du musst die Daten doch irgendwie in das Programm einlesen. An genau dieser Stelle fügst du die Daten so hinzu. Vielleicht solltest du dir die Grundlagen genauer anschauen.

Nutze bitte übrigens die Code-Tags, wenn du Code postest.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 29.10.12 22:35

Ich hab es mal anders probiert:
  For i As Integer = 0 To ListBox7.Items.Count - 1
            For a As Integer = 0 To ListBox8.Items.Count - 1
                If ListBox7.Items.Contains(a) Then
 
                End If
            Next
        Next
Doch wenn er jetzt eien Stelle findet, wie leg ich es fest, dass er es dann markiert ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: b0tter
Datum: 30.10.12 11:13

Hab es hinbekommen !
  For i As Integer = 0 To ListBox7.Items.Count - 1
            For a As Integer = 0 To ListBox8.Items.Count - 1
                If ListBox7.Items.Item(i).ToString.Contains(ListBox8.Items.Item( _
                  a).ToString) Then
                    ListBox7.SetSelected(i, True)
                    ListBox9.Items.Add(ListBox7.SelectedItem)
                End If
            Next
        Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox bestimme Items löschen 
Autor: keco
Datum: 30.10.12 14:27

Ich habe ehrlich gesagt bis jetzt immernoch keine Ahnung, was du vorhast. In der Frage wolltest du etwas löschen, jetzt wird etwas hinzugefügt ...

Hauptsache es funktioniert nun.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel