| |
VB.NET - Ein- und UmsteigerListbox 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 ? | |
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. | |
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. | |
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. | |
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?? | |
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. | |
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? | |
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 ? | |
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. | |
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. | |
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 | |
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 ? | |
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. | |
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 ? | |
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 | |
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. | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|