Wie kann verhindert werden, dass nach dem Bearbeiten einer DataGridViewTextBoxColumn und dem Drücken von EnterKey zur nächsten Zeile gewechselt wird?

8

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?

    
Max 24.04.2011, 16:02
quelle

8 Antworten

5

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.

    
David Hall 24.04.2011, 22:34
quelle
9

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

    
V4Vendetta 25.04.2011 04:42
quelle
3
%Vor%

Es ist nur ein Workaround, keine echte Lösung, aber es funktioniert.

    
Antonello Cuccu 09.07.2015 14:48
quelle
1

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%     
ahmedsafan86 28.03.2012 23:39
quelle
1

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%     
swe 22.02.2017 14:39
quelle
0

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.

    
Shehan Silva - weltZ 21.03.2015 20:14
quelle
0

Mach einfach, dass es gut funktioniert.

%Vor%     
Numan Kibria 05.11.2016 05:55
quelle
-1

Wenn Sie das Formular bei der Eingabe einfach schließen müssen, können Sie den folgenden Code verwenden. Ich nehme an, dass das Raster schreibgeschützt ist und Sie nicht die Situation unterscheiden müssen, in der die Eingabetaste gedrückt wurde.

%Vor%     
qub1n 17.09.2014 07:40
quelle