Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks
Autor
Nachricht
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248

[Text] ListView für Fortgeschrittene
Verfasst am: 26.03.2007, 23:09

Thema: ListView für Fortgeschrittene

Heute möchte ich euch das ListView noch etwas näher bringen.
Beschäftigen werden wir uns mit diesen Funktionen:

1. Über eine Schleife Einträge machen
2. Einen bestimmten Eintrag finden.
3. Über eine Schleife Einträge löschen
4. Fehler verhindern
5. Mausklicks auswerten
6. Tastendruck auswerten

Als erstes erstellt ihr mal ein ListView mit einer Spalte und der Ansicht lvwReport.
Damit es etwas einfacher ist, nenne ich das ListView einfach „lv“.
Hier ein code den wir für alle Beispiele brauchen werden. Ich werde diesen später nicht mehr schreiben.
Code:

Option Explicit
Option Base 1

Private buffer(10) As String
Private i As Integer

Private Sub Form_Load()
buffer(1) = "Kevin"
buffer(2) = "Michael"
buffer(3) = "Joachim"
buffer(4) = "Benjamin"
buffer(5) = "Phillip"
buffer(6) = "Thomas"
buffer(7) = "Dennis"
buffer(8) = "David"
buffer(9) = "Daniel"
buffer(10) = "Dieter"
End Sub


Mit Option Base 1 legen wir fest, das alle Arrays mit 1 anfangen und nicht mit 0.
Muss man nicht machen, ist in Verbindung mit einem ListView aber etwas praktischer, da das ListView im Gegensatz zur Listbox auch mit 1 anfängt.

Danach deklarieren wir uns ein Array, wo wir ein paar Namen eintragen, die wir dann in die Liste schreiben. Ob ihr die Namen aus einer Wordlist auslest, oder sie von irgendwo anders besorgt ist euch überlassen.
Die Variable i brauchen wir für die For Schleife.


1. Über eine Schleife Einträge machen.

Das ist eigentlich sehr einfach.
Code:

For i = 1 To 10
 lv.ListItems.Add , , buffer(i)
Next i


Die Schleife läuft jetzt von 1 bis 10 durch. Die Variable i erhöht sich immer um eins, also wird buffer(1) bis buffer(10) in die Liste eingetragen.

Im ersten Teil des Tutorials hab ich schon gezeigt wie man vorgeht wenn man mehrere Spalten hat und in alle etwas eintragen möchte.
Hier nochmal ein code dazu mit Schleife.
Code:

Dim list as Listitem
For i = 1 To 10
 Set List = lv.ListItems.Add(, ,  buffer(i))
 With List
  .SubItems(1) = "Spalte 2"
  .SubItems(2) = "Spalte 3"
 End With
Next i
Set list = nothing



2. Einen bestimmten Eintrag finden.
Jetzt wollen wir mal nach einen bestimmten Eintrag suchen. Das ist natürlich wichtig, falls ihr in weiteren Spalten zu diesem Eintrag wichtige Information habt, die ihr auslesen möchtet.

Code:

For i = 1 To lv.ListItems.Count
 If StrComp(lv.ListItems(i).Text, "David" , vbTextCompare) = 0 Then
  Call MsgBox("David ist an der Stelle " & i & " in der Liste.", vbInformation, "David gefunden")
 End If
Next i


Wir benutzen also wieder eine Schleife um jeden Eintrag zu überprüfen.
Dieses Mal läuft die Schleife nicht von 1 bis 10, sondern von 1 bis lv.Listitems.Count.
Wer nicht weiß was Count bedeutet sollte jetzt in einem Wörterbuch nachsehen.
So ist also gewährleistet, dass die Schleife bis zum letzten Eintrag durchläuft, egal wie viele in der Liste sind.
Als nächstes fällt euch vielleicht der Befehl „StrComp“ auf.
Hier wird der Text in der Zeile mit dem Text „David“ verglichen und falls sie gleich sind, wird eine Message ausgegeben.
Ich hätte hier auch einfach If lv.Listitems(i).Text = „David“ schreiben können, aber der Aufruf StrComp ist deutlich schneller und deswegen vorzuziehen.

Außerdem fällt euch vielleicht das i in der Klammer nach lv.Listitems auf.
Mit i geben wir einfach die Zeilennummer an, die wir überprüfen wollen.

Man kann auch in anderen Spalten suchen.
Dann muss die If Abfrage etwa so aussehen.
Code:

If StrComp(lv.ListItems(i).SubItems(1), "David" , vbTextCompare) = 0 Then

End If


SubItems(1) entspricht der zweiten Spalte, SubItems(2) der dritten und so weiter.


3. Über eine Schleife Einträge löschen.

Nun wollen wir Einträge wieder löschen.
Wenn ihr die komplette Liste leeren wollt geht das einfach mit:
Code:

lv.ListItems.Clear


Jetzt wollen wir aber nur markierte Einträge aus der Liste löschen.
Dazu müßt ihr in den Eigenschaften des ListViews die Options Multiselect aktivieren.

Code:

For i = lv.ListItems.Count To 1 Step -1
 If lv.ListItems(i).Selected = True Then lv.ListItems.Remove i
Next i


So werden alle markierten Zeilen aus der Liste entfernt.
In diesem Fall läuft die Schleife aber rückwärts, weil es sonst zu einem Fehler kommen würde.
Stellt euch das so vor. Count ist sagen wir 10 und wir versuchen jede Zeile von 1 bis 10 zu überprüfen. Nun löschen wir aber markierte Zeilen raus, was bedeutet dass nicht mehr 10 Zeilen in der Liste sind und so wird es zu einem Fehler kommen wenn wir eine Zeile überprüfen wollen die nicht mehr existiert.
Auf Step -1 dürft ihr nicht vergessen, da die Schleife sonst nicht rückwärts läuft.

In der If Abfrage wird überprüft ob die Zeile markiert (selected) ist oder nicht und dann gegebenenfalls gelöscht.

4. Fehler verhindern.

Naja. Einen Fehler haben wir ja schon verhindert in dem wir die For Schleife zum löschen rückwert laufen lassen. Aber wo können noch Probleme auftreten. Besonders welche die der spätere Benutzer auslösen könnte.

Z.B. Die Suchfunktion eines Eintrages.
Wenn ihr eine Textbox nutzt, wo der Benutzer ein Wort eingeben kann zum suchen, solltet ihr vorher abfragen ob er überhaupt etwas eingeben hat.
Am besten so:
Code:

If Len(Text1.Text) <> 0 Then

End if

So wird überprüft ob Text1.Text länger als null ist.
Das ist um einiges schneller als if Text1.Text = ““ Then.
Dieselbe Abfrage sollte auch beim einfügen in die Liste sein.

5. Mausklicks auswerten.
Normale Klicks wie DoubleClick und Click auszuwerten ist kein Problem.
Code:

Private Sub lv_DblClick()
Call MsgBox(lv.SelectedItem.Text)
End Sub


Wie ihr seht steht hier jetzt lv.SelectedItem.Text und nicht lv.ListItems…
Unter der Option SelectedItems wird uns die zur Zeit markierte Zeile übergeben.

Nun bieten wir hier aber die Möglichkeit mehrere Zeilen zu markieren. Mit den oberen code bekommen wir nur die zuletzt markierte Zeile angezeigt.
Hier müssen wir wieder eine Schleife benutzen.

Code:

For i = 1 to lv.Listitems.Count
  If lv.ListItems(i).Selected = True Then
   Call MsgBox(lv.Listitems(i).Text)
  End If
 Next i


6. Tastendruck auswerten.
Ist ebenfalls sehr einfach.
Code:

Private Sub lv_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
 Call MsgBox(lv.SelectedItem.Text)
End If
End Sub


Hier wird einfach überprüft ob die Taste „Enter“ gedrückt wurde und gegebenenfalls eine Message ausgegeben. Leider kann man so nicht alle Tasten abfragen.


So. Das war es mal wieder.
Im nächsten Teil werde ich die folgenden Dinge erläutern.

1. Tasten wie F1 oder Entf im ListView Abfragen
2. Rechte Maustaste im ListView auswerten
3. Listeneinträge verschieben
4. Einträge von einem ListView zum anderen verschieben
5. Einträge sortieren
6. Suche, mit nur teilweise bekannten Wörtern. Z.B (K*e*v*n)
7. Bei Eingabe eines Buchstaben soll passende Wörter angezeigt werden die mit diesen anfangen.


Also. Have fun. :)

mfg, ZiG
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)


Zuletzt bearbeitet von ZiG_ am 23.05.2007, 12:45, insgesamt einmal bearbeitet
 
413X_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 16.12.2006
Beiträge: 266


Verfasst am: 02.04.2007, 12:40

So ich darf das Thema nun fortfuehren mit der Erlaubnis von ZiG Cool
Ok dann gehts direkt mal los:

1. Tasten im ListView abfragen

Wenn ihr zB einen Eintrag beim Tastendruck von "Entfernen/Delete" loeschen wollt, macht ihr das mit diesem Code:

[code]
Private Sub ListView1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim i As Integer
If KeyCode = 46 Then 'Wenn Entfernen = 46 gedrueckt wird
For i = ListView1.ListItems.Count To 1 Step -1 'Jedes Item der Listview rueckwaerts durchgehen
If ListView1.ListItems(i).Selected = True Then 'Wenn das Item markiert ist, dann
ListView1.ListItems.Remove i 'Item loeschen
End If
Next i
End If
End Sub
[/code]

2. Rechte Maustaste im ListView auswerten
[code]
Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = 2 Then 'Bei Rechtsklick = 2
MsgBox "Es wurde die rechte Maustaste auf dem Punkt (" & x & " | " & y & ") geklickt."
End If
End Sub
[/code]

Die weiteren Punkte mache ich wahrscheinlich spaeter noch weiter, denn auch ich habe noch ein Leben Very Happy
_________________

http://www.413x.dl.am

Tod den 1337-Scriptkiddies xD
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 02.04.2007, 13:03

Den Code mit der rechten Maustaste sollte man noch erweitern, da man so nicht unterscheiden kann ob ins leere gedrückt wurde oder auf einen Eintrag und da es bei dem obigen code auch zu Problemen kommen kann.

[code]
Private Sub lv_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
If Button = 2 Then
With lv
Set list = .HitTest(x, Y)
If Not list Is Nothing Then
Set .SelectedItem = .ListItems(list.Index)
'code
Else
'code
End If
End With
End If
Set list = Nothing
End Sub
[/code]

Den hab ich irgendwo von vbarchiv oder activevb.

mfg, ZiG
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Blue!Sky!_
Coder
Coder



Anmeldedatum: 06.10.2007
Beiträge: 227


Verfasst am: 10.11.2007, 18:41

Danke euch beiden---...---
_________________
 
big earl_
Coder
Coder



Anmeldedatum: 11.05.2007
Beiträge: 208


Verfasst am: 10.11.2007, 19:59

Könnte vllt einer von euch beiden noch ein TUT oä machen um zu Testen das überhaubt etwas in der List steht ?

denn es kommen zuviele errors nur weil die datei nicht existiert
 
Blue!Sky!_
Coder
Coder



Anmeldedatum: 06.10.2007
Beiträge: 227


Verfasst am: 10.11.2007, 20:40

On error goto 10
fddfdfdf
10
is doch nich so schwer
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 10.11.2007, 20:46

@big earl

Iwie kapier ich nicht was du meinst.
Willst du jetzt überprüfen ob die Liste leer ist, oder ob eine Datei existiert?

Liste leer?
Code:

if ListView1.Listitems.count = 0 then


File existiert?
Code:

Public Function FileExists(ByVal FileName As String) As Boolean
    On Local Error Resume Next
    FileExists = (Dir$(FileName) <> "")
End Function

_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Primal_
Newbie
Newbie

Anmeldedatum: 23.02.2008
Beiträge: 19


Verfasst am: 10.03.2008, 16:35

Kann vielleicht jemand nen Code zum speichern der ganzen Listview tabelle hier posten
man sollte sie dann auch wieder laden können

Bitte

MfG Primal
_________________


 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 10.03.2008, 16:56


Hier werden tutorials gepostet und nicht sources gesammelt.
Außerdem wurde das Thema schon paarmal besprochen. Sufu hilft also weiter.
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks

Tags: listview, löschen, text, verschieben

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 869 09.06.2011, 12:19
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2432 06.03.2008, 20:19
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
Keine neuen Beiträge Listbox speichern & laden 2047 22.03.2007, 20:25
 



[ Time: 0.3738s ][ Queries: 113 (0.0508s) ][ GZIP on - Debug on ]