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": 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 18.239 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |