Taste "Enter" im Grid-Control über Eventhandler abfangen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

MaddinR
***
Beiträge: 61
Registriert: So, 06.03.2011 11:15

Taste "Enter" im Grid-Control über Eventhandler abfangen

Beitrag von MaddinR »

Hallo Leute

Ich habe ein Grid-Control in meinem FormView platziert. Und nun möchte ich, dass bei Drücken der "Enter"-Taste eine bestimmte Aktion ausgelöst wird. Bedauerlicherweise reagiert das Programm nur auf das Ereignis "Taste losgelassen" und nicht auf "Taste gedrückt". Eigentlich wäre mir das egal, nur dummerweise reagiert das Grid schon und kommt mit seinen Aktionen zum Ende bevor es mich benachrichtigt. Es benachrichtigt mich erst, nachdem es seine Aktionen komplett abgeschlossen hat. Problematisch ist, dass der Satz geskipt wird, wenn die Zellposition zufällig am rechten Rand war und dann würde ich einen falschen Record ermitteln... also nicht mehr den, auf urpsprünglich Entger gedrückt wurde, sondern den nächsten.

Irgend eine Idee, wie man das lösen kann?

vg, Maddin
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Taste "Enter" im Grid-Control über Eventhandler abfangen

Beitrag von DPunch »

Aloha

Die Enter-Taste ist wahrscheinlich eine so fest verankerte Grundfunktionalität des GridControls, dass sich damit nicht rumspielen lässt (ich hätte zumindest keine Ahnung, wie das gehen könnte).

Was Du Dir zunutze machen kannst, ist die Tatsache, dass der Cursor nach einem Datensatzwechsel in aller Regel in der 1. Spalte steht und die einzige Möglichkeit, per Enter dort hin zu kommen, ist das Drücken in der letzten Spalte des vorherigen Datensatzes. In diesem Fall kannst Du den Datensatz-Zeiger kurz auf den vorherigen Datensatz setzen, die gewünschten Daten auslesen, und dann den Zeiger wieder zurücksetzen.
So als grober Workaround sollte etwas wie dies hier funktionieren:

Code: Alles auswählen

Sub KeyReleased(oEvt)
	If oEvt.KeyCode = 1280 Then
		oGrid = oEvt.Source
		oRowSet = oGrid.Model.RowSet
		nColumn = oGrid.CurrentColumnPosition
		If nColumn = 0 Then
			If oRowSet.isNew Then
				oRowSet.Last
			Else
				oRowSet.Previous
			End If
			nColumn = oGrid.Count
			MsgBox oRowSet.getString(nColumn)
			If oRowSet.isLast Then
				oRowSet.moveToInsertRow
			Else 
				oRowSet.Next
			End If
		Else
			MsgBox oRowSet.getString(nColumn)
		End If
	End If
End Sub
MaddinR
***
Beiträge: 61
Registriert: So, 06.03.2011 11:15

Re: Taste "Enter" im Grid-Control über Eventhandler abfangen

Beitrag von MaddinR »

DPunch hat geschrieben:Die Enter-Taste ist wahrscheinlich eine so fest verankerte Grundfunktionalität des GridControls, dass sich damit nicht rumspielen lässt (ich hätte zumindest keine Ahnung, wie das gehen könnte).
Ja, ist vermutlich so. Wobei ich das unter C++ im MSFlexGrid trotzdem abfragen und dann im Handler entscheiden konnte, ob ich nach meiner Verarbeitung die Nachrichtenkette und deren reguläre Abarbeitung wieder aufnehme oder einfach mit "Nothing-ToDo" als Rückgabe beende.
DPunch hat geschrieben:Was Du Dir zunutze machen kannst, ist die Tatsache, dass der Cursor nach einem Datensatzwechsel in aller Regel in der 1. Spalte steht und die einzige Möglichkeit, per Enter dort hin zu kommen, ist das Drücken in der letzten Spalte des vorherigen Datensatzes. In diesem Fall kannst Du den Datensatz-Zeiger kurz auf den vorherigen Datensatz setzen, die gewünschten Daten auslesen, und dann den Zeiger wieder zurücksetzen.
Ich habe da wirklich lange drüber nachgedacht und bin zu dem Ergebnis gekommen, dass das im Moment wohl wirklich funktionieren könnte. Aber irgendwie gefällt mir das nicht so richtig. Das ist irgendwie so, wie "Egal, auch wenn die Räder 4-eckig sind... wir nageln auf jede Seite einen halben kreis drauf, dann wirds schon laufen....". Ich denke, ich akzeptiere einfach, hier an dieser Stelle nur die Maus zu verwenden und Enter nicht für die weitere Auswahl zu nutzen. Ich habe auch mal an einen Default-OK-Button gedacht... bin noch hin- und hergerissen....im Moment funktionierts eigentlich ganz zufriedenstellend auch ohne Enter.

vg, Maddin
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Taste "Enter" im Grid-Control über Eventhandler abfangen

Beitrag von DPunch »

Aloha
MaddinR hat geschrieben:Ich habe da wirklich lange drüber nachgedacht und bin zu dem Ergebnis gekommen, dass das im Moment wohl wirklich funktionieren könnte. Aber irgendwie gefällt mir das nicht so richtig. Das ist irgendwie so, wie "Egal, auch wenn die Räder 4-eckig sind... wir nageln auf jede Seite einen halben kreis drauf, dann wirds schon laufen....".
Naja, es gibt wohl keine Programmiersprache, die komplett ohne Workarounds alles ermöglicht, was man sich so vorstellt.

In diesem Fall ist halt die feste Bindung der Enter-Taste an das GridControl bei Eingaben in derselben ein Hindernis, aber solange der Workaround ohne Haken und Ösen läuft, ist das doch kein Problem (wobei ich natürlich so aus dem Stehgreif weder weiss, ob mein Codebeispiel tatsächlich ohne Haken und Ösen läuft, noch, ob die Enter-Taste wirklich so fest mit dem GridControl verbunden ist).
Antworten