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.172 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 März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevCoolbar 3.0 Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access |
||||||||||||||||
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. |