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   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Controls · MSFlexGrid/DataGrid   |   VB-Versionen: VB4, VB5, VB628.02.05
Flexgrid: optimale Spaltenbreite setzen

Dieser Code ermittelt die optimale Spaltenbreiten im FlexGrid-Control.

Autor:   Hermann RöttgerBewertung:     [ Jetzt bewerten ]Views:  16.120 
www.direct-solutions-software.comSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Das Flexgrid-Control trägt seinen Namen nicht zu unrecht, ist es doch eines der flexibelsten Steuerelemente, die Visual Basic bietet. Was allerdings fehlt, ist eine "Autosize" - Eigenschaft, mit der die Breite jeder Spalte optimal festgelegt wird. Für dieses Problem gibt es eine sehr einfache Lösung, die ich euch heute präsentieren will.

Hier das "Rezept":
Man nehme ein Label mit aktivierter Autosize-Eigenschaft, dessen Font-Eigenschaften mit dem Flexgrid übereinstimmen, kopiert alle Einträge des Flexgrids nacheinander hinein und bekommt so die jeweilige optimale Spaltenbreite.

Soviel zur Theorie. Kopiert den nachfolgenden Code einfach in ein Formular mit einem Flexgrid und einem Label:

Private Sub Form_Load()
  ' Flexgrid zu Demonstrationszwecken mit Zeichenketten
  ' von zufälliger Länge füllen...
  Dim Zufall As Long
  Dim x As Long
  Dim y As Long
 
  With MSFlexGrid1
    .FixedCols = 0
    .FixedRows = 1
    .Rows = 15
    .Cols = 5
    For y = 0 To .Rows - 1
      For x = 0 To .Cols - 1
        Zufall = Int((20 + 1) * Rnd + 3)
        .TextMatrix(y, x) = String(Zufall, "X")
      Next x
    Next y
  End With
 
  ' Funktions-Aufruf per SpaltenBreite
  ' [Name des Flexgrids], [Name des Labels]
  SpaltenBreite MSFlexGrid1, Label1
End Sub
Sub SpaltenBreite(FlexGrid As MSFlexGrid, SizeLbl As Label)
  Dim Spalte As Long
  Dim Zeile As Integer
  Dim Breite As Double
 
  With FlexGrid
    ' Font-Eigenschaften des Flexgrids auf Label
    ' übertragen
    SizeLbl.Font = .Font
    SizeLbl.FontSize = .Font.Size
    SizeLbl.FontItalic = .Font.Italic
    SizeLbl.FontBold = .Font.Bold
 
    ' Autosize des Labels aktivieren und Label
    ' ausblenden
    SizeLbl.AutoSize = True
    SizeLbl.Visible = False
 
    ' Aktualisierung des Flexgrids verhindern, bis
    ' Vorgang abgeschlossen ist
    .Redraw = False
 
    ' Flexgrid spaltenweise "abtasten"...
    For Spalte = 0 To .Cols - 1
      ' ermittelte Höchstbreite vor jedem
      ' Spaltendurchlauf zurücksetzen
      Breite = 0
      ' Alle Zeilen der aktuellen Spalte durchlaufen...
      For Zeile = 0 To .Rows - 1
        ' Inhalt der aktuellen Zelle in Label schreiben...
        SizeLbl.Caption = .TextMatrix(Zeile, Spalte)
        ' Ist die aktuelle Breite des Labels größer als die
        ' bisher ermittelte höchste Breite ?
        If SizeLbl.Width > Breite Then
          ' Ja, dann Breite in VAR Breite ablegen
          Breite = SizeLbl.Width
        End If
      Next Zeile
      ' Wenn alle Zeilen der aktuellen Spalte durchlaufen sind,
      ' ermittelte höchste Spaltenbreite als optimale Spaltenbreite
      ' der aktuellen Zeile des Flexgrids setzen
      .ColWidth(Spalte) = Breite
    Next Spalte
 
    ' Aktualiaierung des Flexgrids wieder zulassen
    .Redraw = True
  End With
End Sub

Ok, das war's schon. Ich hoffe, dass euch dieser Tipp eure tägliche Arbeit etwas erleichtern kann.
 

Dieser Tipp wurde bereits 16.120 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