Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0152: DatagridView: Return-Taste durch Tab ersetzen.

 von 

Hinweis zum Tippvorschlag  

Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Listensteuerelemente
  • Steuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Datagridview,keypreview,keys

Der Vorschlag wurde erstellt am: 28.11.2007 19:40.
Die letzte Aktualisierung erfolgte am 05.02.2009 00:33.

Zurück zur Übersicht

Beschreibung  

Will man vollständige Datensätze im DatagridView eingeben, kann man die einzelnen Eingaben nicht mit Return abschließen, sondern muß die ergonomisch ungünstig liegende Tab-Taste bemühen.
Hier wird ein DatagridView-Erbe vorgestellt, der statt Return-Tastenanschlägen Tab-Anschläge ausführt.
Die Idee, dieses Verhalten zu implementieren, stammt aus einem Thread des VB.Net - Forums

(Zu beachten: Das "EnterNextDGV" erscheint erst dann in der Toolbox, wenn die Solution erstellt worden ist.)

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [13,70 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' -------- Anfang Projektgruppe EnterNextCellGrid.sln --------
' ------- Anfang Projektdatei EnterNextCellGrid.vbproj -------
' --------------- Anfang Datei EnterNextDGV.vb ---------------
' IDE-Voreinstellungen:
' Option Explicit On
' Option Strict On

' Project-Einstellungen:
' Imports System.Windows.Forms

Public Class EnterNextDGV

    Inherits DataGridView

    ' Die Schwierigkeit besteht v.a. darin, daß während einer Dateneingabe die
    ' Tastenanschläge gar nicht vom DataGridview empfangen werden, sondern vom editierenden
    ' Control (meist eine kleine Textbox, die das DGV über der Zelle anzeigt).

    Private WithEvents _EditingControl As Control

    Protected Overrides Sub OnEditingControlShowing( _
                ByVal e As DataGridViewEditingControlShowingEventArgs)

        ' speichert das Editier-Control in einer Variablen, deren _PreviewKeyDown() verarbeitet wird
        MyBase.OnEditingControlShowing(e)
        _EditingControl = e.Control

    End Sub

    Private Sub _EditingControl_PreviewKeyDown( _
                ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs) _
                Handles _EditingControl.PreviewKeyDown

        ' bevor das Editing-Control das Return empfängt, führt das Grid die Tab-Taste aus.
        ' Dadurch wird das Editing-Control versteckt (oder entladen?), jedenfalls geht der
        ' Return-Tastendruck verloren.
        If DirectCast(e.KeyValue, Keys) = Keys.Return Then

            ' Tab mit orig. Modifiern (Shift, Ctr, Alt) ausführen
            MyBase.ProcessTabKey(e.Modifiers)
        End If

    End Sub

    Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)

        ' auch ohne aktiviertem Editing-Control ggfs. Return durch Tab vertauschen
        If DirectCast(e.KeyValue, Keys) = Keys.Return Then

            ' der Basis ein KeyEventArgs unterschieben, bei dem das Return-Flag durch ein
            ' Tab-Flag ersetzt ist
            e = New KeyEventArgs(DirectCast(e.KeyData + Keys.Tab - Keys.Return, Keys))
        End If

        MyBase.OnKeyDown(e)

    End Sub

End Class

' ---------------- Ende Datei EnterNextDGV.vb ----------------
' ----------- Anfang Datei frmEnterNextCellGrid.vb -----------
Public Class frmEnterNextCellGrid

    Private Sub frmEnterNextCellGrid_Load(ByVal sender As Object, ByVal e As EventArgs) _
                Handles MyBase.Load

        Me.EnterNextDGV1.RowCount = 5

    End Sub

End Class

' ------------ Ende Datei frmEnterNextCellGrid.vb ------------
' -------- Ende Projektdatei EnterNextCellGrid.vbproj --------
' --------- Ende Projektgruppe EnterNextCellGrid.sln ---------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.