Hallo ich mal wieder,
ich habe ein Datagridview über Datenquellen hinzugefügt.
So weit, so gut.
Nun möchte ich das sich die Textboxen des DGV bei ENTER so verhalten wie TAB.
Ok: ich kann es über das KeyDown Ereignis der TextboxColumn machen. Funktioniert auch (so habe ich es bisher gemacht).
Da ich nun 25 Spalten habe ... > viel schreiberei und Code.
Kann man das einfacher machen ?
Habe etwas gefunden: über EditingControlShowing.
Hier mein Code:
Funktioniert !
Aber...
Nach dem ersten Enter wird die nächste Spalte genommen. Beim 2. Enter wird die übernächste Spalte genommen. und so weiter.
Ich weiß nicht wo ich was leeren muß, damit er wirklich die nächste Spalte nimmt.
Apps. die Sub TextBox_PreviewKeyDown wird beim 2. Enter 2 mal durchlaufen etc. daher kommt das. Aber warum durchläuft er das aufsummiert. Muß ich irgendwo den Tastaturpuffer leeren?
für nen Tip wäre ich sehr dankbar.
Groß Wolfy
ich habe ein Datagridview über Datenquellen hinzugefügt.
So weit, so gut.
Nun möchte ich das sich die Textboxen des DGV bei ENTER so verhalten wie TAB.
Ok: ich kann es über das KeyDown Ereignis der TextboxColumn machen. Funktioniert auch (so habe ich es bisher gemacht).
Da ich nun 25 Spalten habe ... > viel schreiberei und Code.
Kann man das einfacher machen ?
Habe etwas gefunden: über EditingControlShowing.
Hier mein Code:
VB.NET-Quellcode
- #Region "Enter handling in DGV"
- Private Sub DetailsDataGridView_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DetailsDataGridView.EditingControlShowing
- Dim tb As TextBox = CType(e.Control, TextBox)
- KeyPreview = False
- AddHandler tb.PreviewKeyDown, AddressOf TextBox_PreviewKeyDown
- End Sub
- Private Sub TextBox_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs)
- If e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Return Then
- Dim rwIndex As Integer = Me.DetailsDataGridView.CurrentCell.RowIndex
- Dim colIndex As Integer = Me.DetailsDataGridView.CurrentCell.ColumnIndex
- Dim newRow As Integer = 0
- Dim newCol As Integer = 2
- If colIndex = DetailsDataGridView.ColumnCount Then
- newRow = Me.DetailsDataGridView.CurrentCell.RowIndex + 1
- If newRow = Me.DetailsDataGridView.RowCount Then
- Return
- End If
- Else
- newRow = Me.DetailsDataGridView.CurrentCell.RowIndex
- newCol = colIndex + 1
- End If
- 'For i = 0 To DetailsDataGridView.ColumnCount - 1
- ' Debug.Print("Index: " & i & " Name: " & DetailsDataGridView.Columns(i).HeaderText)
- 'Next
- KeyPreview = False
- Me.DetailsDataGridView.CurrentCell = Me.DetailsDataGridView.Rows(newRow).Cells(newCol)
- 'SendKeys.Send("{tab}")
- End If
- KeyPreview = False
- End Sub
- #End Region
Funktioniert !
Aber...
Nach dem ersten Enter wird die nächste Spalte genommen. Beim 2. Enter wird die übernächste Spalte genommen. und so weiter.
Ich weiß nicht wo ich was leeren muß, damit er wirklich die nächste Spalte nimmt.
Apps. die Sub TextBox_PreviewKeyDown wird beim 2. Enter 2 mal durchlaufen etc. daher kommt das. Aber warum durchläuft er das aufsummiert. Muß ich irgendwo den Tastaturpuffer leeren?
für nen Tip wäre ich sehr dankbar.
Groß Wolfy