Tipp-Upload: VB.NET 0152: DatagridView: Return-Taste durch Tab ersetzen.
von Spatzenkanonier
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.
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 |
Verwendete API-Aufrufe: |
Download: |
' 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.