vereinfachtes Resizen von Datagridview-Zellen

    • VB.NET
    • .NET (FX) 4.5–4.8

    Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RISSN.

      vereinfachtes Resizen von Datagridview-Zellen

      Manchmal Zugegebenermassen sehr selten hat man grosse DGVs, mit vielen Zeilen und Spalten, und viel (mehrzeiligen) Text in den DGV-Zellen.
      Will man eine bestimmte Zelle lesen, so muss man etwas umständlich oben die Column resizen, und dann links die Row.
      Daher hab ich mir was gebastelt, wo man die Zelle direkt per RechteMaustaste-Drag resizen kann - ist recht witzig.
      Der Code dafür nicht besonders kompliziert:

      VB.NET-Quellcode

      1. Private _DragOffset As Size, _ResizeCell As DataGridViewCell
      2. Private Sub Grid_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles Grid.CellMouseDown
      3. If e.Button <> MouseButtons.Right Then Return
      4. AddHandler Grid.CellMouseMove, AddressOf Grid_CellMouseMove
      5. _ResizeCell = Grid(e.ColumnIndex, e.RowIndex)
      6. Dim rct = Grid.RectangleToScreen(Grid.GetCellDisplayRectangle(_ResizeCell.ColumnIndex, _ResizeCell.RowIndex, False))
      7. Dim cellBottomRight = New Size(rct.Location + rct.Size)
      8. Dim mousePos = New Size(Control.MousePosition)
      9. _DragOffset = cellBottomRight - mousePos
      10. End Sub
      11. Private Sub Grid_CellMouseMove(sender As Object, e As DataGridViewCellMouseEventArgs)
      12. If _ResizeCell Is Nothing Then Return
      13. Dim rct = Grid.RectangleToScreen(Grid.GetCellDisplayRectangle(_ResizeCell.ColumnIndex, _ResizeCell.RowIndex, False))
      14. Dim cellBottomRight = New Size(rct.Location + rct.Size)
      15. Dim diff = Control.MousePosition - (cellBottomRight - _DragOffset)
      16. Grid.Columns(_ResizeCell.ColumnIndex).Width += diff.X
      17. Grid.Rows(_ResizeCell.RowIndex).Height += diff.Y
      18. End Sub
      19. Private Sub Grid_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles Grid.CellMouseUp
      20. If e.Button <> MouseButtons.Right Then Return
      21. RemoveHandler Grid.CellMouseMove, AddressOf Grid_CellMouseMove
      22. _ResizeCell = Nothing
      23. End Sub

      Inne Solution ist noch viel mehr Code. Es ist ein Tool, mit dem man ein spezielles Markup für Tabellen lesen und bearbeiten kann. Tut hier nichts zur Sache, ausser dass es mir ein DGV liefert mit viiiel Text in vielen Zellen.

      Das Cell-Resize-Dragging ist mit dem hier gezeigten Code abgehandelt.
      Dateien
      • RmTableEdit00.zip

        (224,03 kB, 69 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

      Ich hab es einfach Autosized:

      VB.NET-Quellcode

      1. Private _ResizeCell As DataGridViewCell
      2. Private Originals As New List(Of DataGridViewCell)
      3. Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
      4. _ResizeCell = DataGridView1(e.ColumnIndex, e.RowIndex)
      5. Dim hold = Originals.Find(Function(x) x.ColumnIndex = _ResizeCell.ColumnIndex AndAlso x.RowIndex = _ResizeCell.RowIndex)
      6. If hold Is Nothing Then
      7. Originals.Add(_ResizeCell)
      8. DataGridView1.Columns(_ResizeCell.ColumnIndex).AutoSizeMode = DataGridViewAutoSizeColumnsMode.AllCells
      9. Else
      10. DataGridView1.Columns(_ResizeCell.ColumnIndex).AutoSizeMode = DataGridViewAutoSizeColumnsMode.None
      11. Originals.Remove(hold)
      12. End If
      13. End Sub

      Der halbe Inhalt hilft mir ja auch noch nicht^^

      RodFromGermany schrieb:

      @ErfinderDesRades Fehlt da noch ietwas?
      achja, das nuget-package.
      hab jetzt eine Version geuppt (post#1), die diese Abhängigkeit nicht mehr enthält.
      Der in post#1 gezeigten SourceCode-Austausch ist aber soweit komplett und ohne weitere Abhängigkeit.

      Haudruferzappeltnoch schrieb:

      Ich hab es einfach Autosized
      Autosize würde mein Grid zerschiesssen, weil manche Zelle enthält meterlangen Text.