Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0280: Arbeiten mit dem ListView-Control

 von 

Beschreibung 

Dieser Tipp zeigt die grundsätzlichen Methoden und Ereignisse des ListView Controls in der Detailansicht. Auf die Einbindung von Grafiken wurde hier verzichtet; dafür bietet der nächste Tipp genügend Material.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,68 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
' Die Komponente 'Microsoft Windows Common Controls 5.0 (SP2) (comctl32.ocx)' wird benötigt.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Kontrollkästchen-Steuerelement "Check3"
' Steuerelement: Kontrollkästchen-Steuerelement "Check2"
' Steuerelement: Kontrollkästchen-Steuerelement "Check1"
' Steuerelement: Listenansichtsetuerelement "ListView1"

Option Explicit

Private Sub Form_Load()
  Dim x%

    With ListView1
      x = Int(.Width / 3.42)

      .ColumnHeaders.Add , , "Vorname und Name", x
      .ColumnHeaders.Add , , "Strasse und Hausnummer", x
      .ColumnHeaders.Add , , "Plz und Wohnort", x
       
      .View = lvwReport
      
      For x = 1 To 10
        .ListItems.Add , "Zeile " & x, Chr$(Rnd * 26 + 65) & _
                         "  Zeile " & (x - 1) & "...Spalte 1"
                         
        .ListItems(x).SubItems(1) = Chr$(Rnd * 26 + 65) & "  Zeile " _
                                    & (x - 1) & "...Spalte 2"
                                    
        .ListItems(x).SubItems(2) = Chr$(Rnd * 26 + 65) & "  Zeile " _
                                    & (x - 1) & "...Spalte 3"
      Next x
    End With
End Sub

Private Sub Check1_Click()
  If Check1.Value = vbChecked Then
    ListView1.SortKey = 0
    ListView1.SortOrder = lvwAscending
    ListView1.Sorted = True
  End If
End Sub

Private Sub Check2_Click()
  Dim x%
  
  If Check2.Value = vbChecked Then
    ListView1.MultiSelect = True
    For x = 1 To 3
      ListView1.ListItems(x).Selected = True
    Next x
    
    ListView1.ListItems(7).Selected = True
  Else
    For x = 1 To ListView1.ListItems.Count
      ListView1.ListItems(x).Selected = False
    Next x
    
    ListView1.MultiSelect = False
    ListView1.ListItems(1).Selected = True
  End If
  ListView1.SetFocus
End Sub

Private Sub Check3_Click()
  If Check3.Value = vbChecked Then
    ListView1.HideColumnHeaders = True
  Else
    ListView1.HideColumnHeaders = False
  End If
  ListView1.SetFocus
End Sub

Private Sub ListView1_AfterLabelEdit(Cancel As Integer, _
                                     NewString As String)
  Dim x%
  
    x = MsgBox("Soll die geänderte Zelle wirklich " & _
               "übernommen werden?", vbYesNo)
               
    If x = 7 Then Cancel = 1
    ListView1.SetFocus
End Sub

Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)
  Dim x%
  
    x = MsgBox("Wollen die Zelle wirklich editieren?", _
               vbYesNo)
               
    If x = 7 Then Cancel = 1
    ListView1.SetFocus
End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As _
                                  ComctlLib.ColumnHeader)
  Me.Caption = ColumnHeader.Text

  If Check1.Value = vbChecked Then
    ListView1.SortKey = ColumnHeader.Index - 1
    If ListView1.SortOrder = lvwAscending Then
      ListView1.SortOrder = lvwDescending
    Else
      ListView1.SortOrder = lvwAscending
    End If
    ListView1.Sorted = True
  End If
End Sub

Private Sub ListView1_DblClick()
  Me.Caption = "DblClick: Text = '" & ListView1.SelectedItem.Text & _
               "'   Key = '" & ListView1.SelectedItem.Key & _
               "'   Index = '" & ListView1.SelectedItem.Index & "'"
End Sub

Private Sub ListView1_ItemClick(ByVal Item As ComctlLib.ListItem)
  Me.Caption = "Click: Text = '" & Item.Text & "'   Key = '" & _
               Item.Key & "'   Index = '" & Item.Index & "'"
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 6 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Peter am 09.03.2010 um 08:57

Jedesmal, wenn ich durch Google auf diese Seite komme, frage ich mich warum die Tipps immer "so kompliziert" sind. 90% der hier angebotenen Tipps kann man viel einfacher coden.

Kommentar von Franz am 18.02.2006 um 08:19

Hallo,
wer weis wie in einer ListView (MSCOMCTL.OCX 6.0(SP6), Einstellung: 3-lvwReport, AllowColumnReorder = True) die AllowColumnReorder unter VB 6, SP 6 funktioniert? Wenn ich versuche eine Spalte umzupositionieren (mit Drag & Drop), bekomme ich den Fehler "Integer Divide By Zero". Sollte es ohne weiteres funktionieren oder muss programmiert werden, wenn Ja wie am besten?
mfg
Franz

Kommentar von Dennis B. am 02.08.2005 um 10:05

Hi,

benutzt mal folgendes dann müsste es gehen..

Private Sub ListView1_ItemClick(ByVal Item As _
[quote]MSComctlLib.ListItem)[/quote]

vielleicht ist hier nur ein Schreibfehler entstanden..

cu Dennis B.

Kommentar von Albert2000 am 11.05.2004 um 14:51

Warum schreibt ihr oftmals nur Code in die Tipps? Wenn die Beispiele besser kommentiert wären, würd das den anderen Usern schon die Arbeit erleichtern.
So muss man dann jeden unbekannten Befehl im MSDN nachschlagen.

Kommentar von rfrese am 18.07.2003 um 11:49

Hallo,
ich finde es ja sehr gut, das ihr euch so viel Arbeit mit den Beispielen macht, aber leider funktioniert z.B. das mit dem Listview auf meinem Rechner überhaupt nicht, und die Angaben im Sourcecode stimmen einfach nicht. Z.B. wird im Listview-Beispiel angegeben, das 'Microsoft Windows Common Controls 5.0 (SP2)' benötigt wird, kann schon sein, aber wofür ? Das Listview-Control ist über 'Microsoft Windows Common Controls 6.0 (SP4=' implementiert.
Ansonsten funktioniert es eben nicht, 'ComctlLib.ColumnHeader' wird z.B. nicht als Benutzerdefinierter Typ erkannt.
wäre schön, wenn ihr schon diese Beispiele veröffentlicht, umfassende nachvolluiehbare Angaben zur Umgebung zu machen.
mfg,
r. frese

Kommentar von Michi S. am 16.06.2001 um 11:33

ich weiss zwar nich was diese notizen funktion hier an sich hat also probier ich sie mal aus : Frage: und wie kriegt man alle items heraus die mit multiselect selektiert wurden ?