Ich arbeite an einem Programm mit DataGridViews
.
In einem DatagridView
gibt es ein DataGridViewTextBoxColumn
, das vom Benutzer bearbeitet werden kann. Wenn der Benutzer mit dem Eingeben der Zahlen fertig ist, drückt er ENTER auf der Tastatur. Jetzt macht das DataGridView
alle seine Events
, und schließlich Events
, das letzte ist das Problem.
Alles ist erledigt, und Windows wird die nächste DataGridViewRow
auswählen, und ich kann das nicht verhindern.
Ich habe es versucht
%Vor%in fast jedem Fall, den ich gefunden habe. Leider konnte ich die ENTER-Taste nur verhindern, wenn% code_% nicht im Bearbeitungsmodus ist.
Hier ist meine Methode t finden Sie die Eingabe während der Bearbeitung
Hinzufügen des Ereignisses
%Vor%Und das ist das Ereignis, das nur numerische Eingaben akzeptiert.
%Vor%Um es im Detail zu erklären:
Wenn der Benutzer einen Wert eingibt, der einige Abhängigkeiten hat, möchte ich einem anderen Steuerelement den Fokus geben, damit er verwendet wird, um die Abhängigkeiten zu korrigieren.
Ich habe es auch mit DataGridViewTextBoxColumn
versucht, aber das letzte "enter" wird das letzte Ding auf der Ansicht sein.
Weiß jemand, wie man das verhindert?
Nun, ich habe es geschafft, etwas zu bekommen, das funktioniert, was du willst (oder zumindest den schwierigen Teil, ich denke, du hast schon die meisten anderen Sachen gemacht), aber die Lösung lässt meine Haut kriechen.
Was ich am Ende hatte, um das Enter-Key-Event beim Editieren einer Zelle abzubrechen, um eine Mischung aus dem CellEndEdit
-Ereignis und dem SelectionChanged
-Ereignis zu verwenden.
Ich habe einige Felder auf Klassenebene eingeführt, die einen bestimmten Zustand speichern - insbesondere, in welcher Zeile wir uns am Ende der Bearbeitung einer Zelle befinden und ob wir eine geänderte Auswahl anhalten.
Der Code sieht so aus:
%Vor%Sie sollten dies gründlich testen, um sicherzustellen, dass es genau das tut, was Sie brauchen. Ich habe nur überprüft, dass ein Zeilenwechsel beim Drücken der Eingabetaste beendet wird.
Wie ich schon sagte - ich bin nicht gerade glücklich darüber, dass ich so etwas machen muss - es fühlt sich ziemlich spröde an und mag auch komische Nebenwirkungen haben. Aber wenn Sie dieses Verhalten haben müssen, und Sie es gut prüfen, denke ich, dass dies der einzige Weg ist, zu tun, was Sie wollen.
Ich habe dies versucht, um das Enter-Verhalten für Ihr Grid zu ändern, indem ich eine benutzerdefinierte Spalte erbte Textbox-Spalte und Überschreiben des folgenden Ereignisses
%Vor%Es emuliert also anstelle der gesendeten Enter-Taste die Aktion für Tab, die zur nächsten Zelle geht. Hoffe das hilft
Es ist nur ein Workaround, keine echte Lösung, aber es funktioniert.
Ich weiß, dass diese Frage seit langer Zeit gestellt wurde, aber die Antwort könnte für diejenigen nützlich sein, die in der Zukunft suchen, hoffe ich. Die beste Lösung ist, Ihre benutzerdefinierte Spalte und für Textbox zu verwenden, weil wir die eingebauten Klassen nutzen
%Vor%Dann kommen wir zum dgv selbst. Ich habe eine neue Klasse verwendet, die von DataGridView abgeleitet wurde, und meine Spalten hinzugefügt und den Enter-Schlüssel von wndproc auch behandelt
%Vor%Diese Antwort kommt wirklich spät ...
Aber ich hatte genau das gleiche Problem und wollte keine Zeilen usw. zwischenspeichern. Also habe ich gegoogelt und das ist meine Lösung für die Frage. Credits zu So verhindern Sie ein Geben Sie die Taste ein, um EditMode in einem DataGridView zu beenden?
Übernehmen Sie DataGridView und fügen Sie diesen Code (vb.net) hinzu:
%Vor%Sie können es einfach tun ....
1 ... Erstellen Sie das KeyDown-Ereignis für diese Rasteransicht. (Wechseln Sie zu den Eigenschaften in der Rasteransicht und doppelklicken Sie auf das KeyDown-Ereignis).
2 ... Hinter diesem Code -
%Vor%3 ... Endlich sieht es so aus.
%Vor%4. Starten Sie das Programm und sehen Sie.
Tags und Links c# keypress datagridview focus datagridviewtextboxcell