Ohne Zweifel gehört das Doch wie lässt sich das Realisieren? Um das zu bewerkstelligen, müssen ein paar Dinge berücksichtigt werden:
Hier die Routine. Fügen Sie den nachfolgenden Code in ein Modul ein: Public Sub AutoColSevGrid(oForm As Form, oGrid As sevDataGrid.Grid, _ Optional WithColHeaders As Boolean = True) Dim xCol As Long Dim yRow As Long Dim xColValue() As Long Dim xColHeaderValue() As Long Dim AktColWidth As Long Dim OldFont As StdFont With oGrid ' Prüfen, ob es Zeilen und Spalten ' zum Einstellen gibt... If .Rows < 1 Or .Cols < 1 Then Exit Sub ' Eigenschaften der Form und Grid ' in Variablen retten Screen.MousePointer = 11 Set OldFont = New StdFont OldFont = oForm.Font Set oForm.Font = .Font ReDim xColValue(1 To .Cols) ReDim xColHeaderValue(1 To .Cols) .LockUpdate True ' Erst die Schriftbreite der ColHeaders ermitteln ' und in das Array übertragen If WithColHeaders Then For xCol = 1 To .Cols xColHeaderValue(xCol) = oForm.TextWidth(.Columns(xCol).Caption) If .AutoSort And .ShowSortSymbols Then _ xColHeaderValue(xCol) = xColHeaderValue(xCol) + 250 If .Columns(xCol).Image > 0 Then _ xColValue(xCol) = xColValue(xCol) + 250 Next xCol End If ' Jetzt die Schriftbreite der einzelnen Zellen ' ermitteln und in das Array übertragen. Dabei ' wird überprüft, ob die aktuelle Breite größer ' ist, als der bisher größte Wert im Array, und ' ggf. ins Array übertragen. For yRow = 1 To .Rows For xCol = 1 To .Cols AktColWidth = oForm.TextWidth(.Text(yRow, xCol)) If AktColWidth > xColValue(xCol) Then _ xColValue(xCol) = AktColWidth Next xCol Next yRow ' Jetzt die Spaltenbreite aus dem Array Einstellen For xCol = 1 To .Cols If xColHeaderValue(xCol) > xColValue(xCol) Then _ xColValue(xCol) = xColHeaderValue(xCol) .Columns(xCol).Width = xColValue(xCol) + 100 Next xCol ' Formparameter zurücksetzen Set oForm.Font = OldFont Set OldFont = Nothing Screen.MousePointer = 0 ' Grid neu zeichnen .LockUpdate False .Refresh End With End Sub Aufrufbeispiel aus der Form, auf der sich Ihr Grid befindet: ' Spaltenheader berücksichtigen AutoColSevGrid Me, Grid1 Oder: ' Spaltenheader nicht berücksichtigen AutoColSevGrid Me, Grid1, False Hinweis: Die Geschwindigkeit der Funktion ist Abhängig von der Anzahl der Spalten und Zeilen. Auf meinem Testrechner (Pentium IV, 1.4 GHz) benötigt eine Tabelle mit 15 Spalten und knapp 4000 Records ca. 3 Sekunden. Die Funktion überprüft nicht, ob in den einzelnen Zellen ein Icon vorhanden ist. Ich habe aus Performance-Gründen bewusst darauf verzichtet. Dieser Tipp wurde bereits 15.349 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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 ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array sevOutBar 4.0 ![]() Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
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. |