dataGridView, Eingabetaste ignorieren
-
Hi,
hab nen kleines Problem mit der Eingabetaste im dataGridView Steuerelement.
Die Standartverhaltensweise ist ja das nach Betätigung der Taste der Focus in die nächste Zeile verschoben wird. Das möchte ich gerne unterbinden.In meinem Programm wird in dem Grid ne Auflistung an Einträgen angezeigt, von denen ich einen auswähle(eine komplette Reihe). Ich habe einen Key Ereigniss-handler erzeugt, der beim Druck auf die Eingabetaste die Form mit dem dataGridView Element schliesst und die markierte Zeile zurückgibt. Durch die standartmässige Verschiebung des Focus wird nun aber immer eine Zeile unterhalb der markierten Zeile zurückgegeben.
Meine Frage lautet also: Wie kann ich das Verhalten des Grid´s bezüglich der Focusverschiebung ändern?
Meine Lösung wäre, einfach die Position von CurrentRow zu ermitteln und dann eine Zeile davon subtrahieren. Somit hätte ich dann wieder die korrekte Zeile...
Aber da gibts doch bestimmt bessere Möglichkeiten, oder?
Compiler: Visual C++ 2005 express
Vielen Dank für eure Mühen,
Dappeljuh
-
Geht doch
-
Hi Knuddlbaer,
Hab deine Solution gerade mal ausprobiert: Solange in die Zeile nix eingetragen
wird, missachtet er die Eingabetaste, wenn ich allerdings was in eine Zelle schreibe springt der Focus bei druck auf Return in die nächste Zeile...Und das ist ist mein Problem
-
Naja
In meinem Programm wird in dem Grid ne Auflistung an Einträgen angezeigt, von denen ich einen auswähle(eine komplette Reihe). Ich habe einen Key Ereigniss-handler erzeugt, der beim Druck auf die Eingabetaste die Form mit dem dataGridView Element schliesst und die markierte Zeile zurückgibt.
hört sich für mich erst einmal danach an, als würde das eine Zeile betreffen.
IMHO ist das Verhalten übrigens nicht intuitiev, wenn ich was in eine Grid eingeben kann und Enter drücke, erwarte ich nicht das sich das Fenster einfach schliesst.
Auf die schnelle fällt mir nur ein vom DataGrid zu erben , die Tasten abzufangen oder eine eigenen Cellentyp zu erstellen.
-
Mit Tasten abfangen meinst du folgendes?
Einen Keydown EventHandler erstellen und dann per
if (e.KeyCode == Keys.Return)die Taste auswerten? So hab ich das bisher gemacht...
An Vererbung hab ich auch schon gedacht, allerdings müsste ich dann einiges an geschriebenen Code ändern, da ich mehrere Grid´s im Gebrauch hab. Daher würd ich lieber ne andere Lösung finden...
Und was meinst du mit nen eigenen Cellentyp erstellen?
DAnke für die Hilfe, ich werd mir jetzt erstmal deine links reinziehen
-
Na, die Tasten werden vom Editorcontrol gefangen, da kommst vorher nicht ran.
Also musst Du in die Trickkiste greifen und einiges an Aufwand treiben.Du könntest aber überlegen ob Du wirklich die Eingabe zulassen willst, das was Du bisher schreibst hört sich an nach:
Ich gebe einen Wert ein, drücke Enter und habe die Zeile ausgewählt, die Form geht zu.
Ich könnte mir eher vorstellen das Du eine reine Auswahl seitens des Benutzers benötigst, dann reich ein einfaches ReadOnly.
-
Hi,
hab jetzt doch noch ne Möglichkeit gefunden:
if (e.KeyCode == Keys.Return)
e.SuppressKeyPress = TrueDamit lässt sich das Senden der Eingabetaste an das Grid unterdrücken.
Funktioniert wunderbar,
danke für deine MüheDappeljuh
-
Eigentlich hätte ich das Verhalten mit Handled = true erwartet ^^
Auf der anderen Seite schreibt ja die MSDN bei Handled eindeutig:
[...]
Wenn verhindert werden soll, dass das aktuelle Steuerelement ein Tastendruck empfängt, verwenden Sie die SuppressKeyPress-Eigenschaft.Besten Dank fürs Feedback, was dazu gelernt