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
- Private _DragOffset As Size, _ResizeCell As DataGridViewCell
- Private Sub Grid_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles Grid.CellMouseDown
- If e.Button <> MouseButtons.Right Then Return
- AddHandler Grid.CellMouseMove, AddressOf Grid_CellMouseMove
- _ResizeCell = Grid(e.ColumnIndex, e.RowIndex)
- Dim rct = Grid.RectangleToScreen(Grid.GetCellDisplayRectangle(_ResizeCell.ColumnIndex, _ResizeCell.RowIndex, False))
- Dim cellBottomRight = New Size(rct.Location + rct.Size)
- Dim mousePos = New Size(Control.MousePosition)
- _DragOffset = cellBottomRight - mousePos
- End Sub
- Private Sub Grid_CellMouseMove(sender As Object, e As DataGridViewCellMouseEventArgs)
- If _ResizeCell Is Nothing Then Return
- Dim rct = Grid.RectangleToScreen(Grid.GetCellDisplayRectangle(_ResizeCell.ColumnIndex, _ResizeCell.RowIndex, False))
- Dim cellBottomRight = New Size(rct.Location + rct.Size)
- Dim diff = Control.MousePosition - (cellBottomRight - _DragOffset)
- Grid.Columns(_ResizeCell.ColumnIndex).Width += diff.X
- Grid.Rows(_ResizeCell.RowIndex).Height += diff.Y
- End Sub
- Private Sub Grid_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles Grid.CellMouseUp
- If e.Button <> MouseButtons.Right Then Return
- RemoveHandler Grid.CellMouseMove, AddressOf Grid_CellMouseMove
- _ResizeCell = Nothing
- 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.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()