Rubrik: Controls · MSFlexGrid/DataGrid | VB-Versionen: VB5, VB6 | 23.02.09 |
FullRowSelect für das MSFlexGrid-Control Mit diesem Codeschnipsel erreicht man, dass im FlexGrid immer die gesamte Datenzeile selektiert wird. | ||
Autor: Wolfgang Schließ | Bewertung: | Views: 13.528 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Das FlexGrid ist ein beliebtes Control unter VB6. Viele User wünschen sich aber eine Eigenschaft, die es erlaubt, dass immer die gesamte Datenzeile selektiert wird und nicht nur die aktuelle Zelle.
Mit nachfolgendem Tipp kann man genau dieses Verhalten nachbilden.
Option Explicit ' MutliSelect erlauben ja/nein Private bMultiSelect As Boolean ' zuletzt selektierte Datenzeile Private intSelectedRow As Long
Private Sub Form_Load() ' FlexGrid-Eigenschaften With MSFlexGrid1 .AllowBigSelection = False .FocusRect = flexFocusNone .SelectionMode = flexSelectionByRow .FixedCols = 0 .Rows = 20 .Cols = 5 End With bMultiSelect = False End Sub
Private Sub MSFlexGrid1_GotFocus() ' Bei Fokuserhalt bspw. durch die TAB-Taste, ' sicherstellen, dass die gesamte Zeile selektiert wird With MSFlexGrid1 If .Row > 0 Then MarkLine .Row End If End With End Sub
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, _ x As Single, y As Single) ' Datenzeile "merken" intSelectedRow = MSFlexGrid1.MouseRow End Sub
Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, _ x As Single, y As Single) With MSFlexGrid1 If Button <> 0 And Not bMultiSelect Then ' wenn kein MultiSelect, sicherstellen, dass immer nur die Datenzeile ' selektiert ist, unter der sich der Mauszeiger befindet If intSelectedRow <> .MouseRow And .MouseRow > 0 Then intSelectedRow = .MouseRow MarkLine intSelectedRow End If End If End With End Sub
Private Sub MarkLine(ByVal Row As Long) ' Markiert die gesamte angegebene Datenzeile With MSFlexGrid1 .Row = Row .RowSel = .Row .Col = .FixedCols .ColSel = .Cols - 1 End With End Sub