vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Sch?tzen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Controls · ListView   |   VB-Versionen: VB4, VB5, VB627.04.03
Automatische Spaltenbreite im ListView-Control

Dieser Tipp verrät, wie sich die optimale Spaltenbreite für ein ListView Control automatisch einstellen lässt.

Autor:   Roland WutzkeBewertung:     [ Jetzt bewerten ]Views:  31.417 
www.vb-power.netSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

In einen früheren Tipp wurde Ihnen bereits gezeigt, wie Sie alle Spalten eines ListView Controls auf die optimale Breite einstellen können. Doch was ist, wenn Sie nur eine oder mehere Spalten automatisch auf die optimale Breite setzen wollen?

Das nachfolgende Modul zeigt Ihnen einen etwas anderen Weg und zusätzliche noch weitere Funktionen, um eine einzelne, bzw. mehrere Spalten gleichzeiig einzustellen.

Folgende Funktionen stehen zur Verfügung:

  • lvwSetSingleColWidth: stellt eine einzelne Spalte ein
  • lvwSetMultiColWidth: stellt eine Liste von Spalten ein
  • lvwSetAllColWidth: stellt alle Spalten auf einmal ein

Optional kann festgelegt werden, ob der Spalten-Header ebenfalls berücksichtigt werden soll:

  • lvw_AUTOSIZE: Header nicht berücksichtigen
  • lvw_AUTOSIZE_WITH_HEADER: Header berücksichtigen (Default)

' *********************************************************************
' *                                                                            
' *    Modul mod_lvwResize                                            
' *                                                                   
' *    Stellt die Spaltenbreite eines ListView-Controls automatisch   
' *    auf die optimale Breite ein. Es stehen folgende Funktionen     
' *    zur Verfügung:                                                 
' *                                                                   
' *       lvwSetSingleColWidth  -> stellt eine einzelne Spalte ein    
' *       lvwSetMultiColWidth   -> stellt eine Liste von Spalten ein  
' *       lvwSetAllColWidth     -> stellt alle Spalten auf einmal ein 
' *                                                                   
' *    Optional kann festgelegt werden, ob der Spalten-Header         
' *    berücksichtigt werden soll:                                    
' *                                                                   
' *       lvw_AUTOSIZE             -> Header nicht berücksichtigen    
' *       lvw_AUTOSIZE_WITH_HEADER -> Header berücksichtigen(Default) 
' *                                                                   
' *    April 2003 - Roland Wutzke                                     
' *                                                                   
' *********************************************************************
 
Option Explicit
 
 
' benötigte API
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hWnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
' benötigte Konstanten
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_SETCOLUMNWIDTH As Long = LVM_FIRST + 30
 
' benötigte Aufzählung
Public Enum lvw_Styles
  lvw_AUTOSIZE = -1
  lvw_AUTOSIZE_WITH_HEADER = -2
End Enum
Public Sub lvwSetAllColWidth(oListView As ListView, _
  Optional ByVal Style As lvw_Styles = lvw_AUTOSIZE_WITH_HEADER)
 
  Dim ColumnIndex As Long
 
  With oListView
    ' Schleife über die Anzahl von Spalten im Listview
    For ColumnIndex = 1 To .ColumnHeaders.Count
      ' Spalte übergeben und Breite einstellen
      lvwSetSingleColWidth oListView, _
        ColumnIndex, Style
    Next ColumnIndex
  End With
End Sub
Public Sub lvwSetMultiColWidth(oListView As ListView, _
  ByVal ColumnArray As Variant, _
  Optional ByVal Style As lvw_Styles = lvw_AUTOSIZE_WITH_HEADER)
 
  Dim ColumnIndex As Long
 
  ' Prüfen, ob das übergebene Array ein Array ist
  If IsArray(ColumnArray) Then
    With oListView
      ' Schleife über die gesamte Länge des Arrays
      For ColumnIndex = LBound(ColumnArray) To UBound(ColumnArray)
        ' Prüfen, ob das Array(Index) gültig ist
        If ColumnArray(ColumnIndex) <= .ColumnHeaders.Count Then
          ' Spalte aus dem Array übergeben und Breite einstellen
          lvwSetSingleColWidth oListView, _
            ColumnArray(ColumnIndex), Style
        End If
      Next ColumnIndex
    End With
  End If
End Sub
Public Sub lvwSetSingleColWidth(oListView As ListView, ByVal ColumnIndex As Long, _
  Optional ByVal Style As lvw_Styles = lvw_AUTOSIZE_WITH_HEADER)
 
  With oListView
    ' Prüfen, ob das Listview in der Ansicht "Report" ist
    If .View = lvwReport Then
      ' Prüfen, ob der übergebene Spaltenindex zulässig ist
      If ColumnIndex >= 1 And ColumnIndex <= .ColumnHeaders.Count Then
        ' API Aufruf an das Listview und Spalte einstellen
        Call SendMessage(.hWnd, LVM_SETCOLUMNWIDTH, _
          ColumnIndex - 1, ByVal Style)
      End If
    End If
  End With
End Sub

Beispiel: (Sie benötigen eine Form mit einem ListView Control)

' Alle Spalten sollen eingestellt werden. Dabei soll 
' auch der Column-Header berücksichtigt werden.
lvwSetAllColWidth ListView1
' Alle Spalten einstellen und den Header 
' nicht berücksichtigen
lvwSetAllColWidth ListView1, lvw_AUTOSIZE
' Nur bestimmte Spalten sollen eingestellt werden. 
' Die Liste wird mit einem Array abgebildet. In diesem Fall 
' werden die Spalten 1,3,4 und 6 übergeben.
Dim colArray As Variant
 
colArray = Array(1, 3, 4, 6)
lvwSetMultiColWidth ListView1, colArray
' Nur eine einzelne Spalte wird eingestellt.
lvwSetSingleColWidth ListView1, 1

Dieser Tipp wurde bereits 31.417 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 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