Seite 1 von 2

gelöst: Filterbutton mit Enter-Taste auslösen

Verfasst: Sa 4. Jan 2020, 17:50
von miho
Hallo zusammen
Ich habe ein Textfeld für einen Filter und einen Button "Suche", welcher über die Aktion "Formular aktualisieren" die Filtertabelle steuert. Nun möchte ich den Button mit der Eingabe/Entertaste auslösen wollen, anstelle extra darauf klicken zu müssen. Sprich das zu suchende Textfragment in das Suchfeld eintippen und mit der Entertatse die Suche auslösen.

Gint es dazu eine Möglichkeit? Benötige ich ein Makro?

Herzlichen Dank!

MIt Gruss miho

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: Sa 4. Jan 2020, 19:44
von RobertG
Hallo miho,

mit der Enter-Taste geht es, wie mit dem Tabulator, zum nächsten Kontrollfeld. Du könntest das folgende machen:
Beschriftung des Buttons ist ursprünglich "Filter". Ändere das in den Eigenschaften zu "Fil~ter". Jetzt steht dort nicht mehr "Filter". Das "t" ist jetzt unterstrichen. Mit Alt+t springst Du zu dieser Taste, mit der Enter-Taste löst Du die Taste aus.

Wenn Du nur ein Filterfeld und den Button hast, dann kann der Button aber auch in der entsprechenden Tabulatorreihenfolge liegen: Tabulator und wieder Enter drücken und der Button wird ausgelöst.

Ansonsten geht nur noch die Auslösung eines Makros beim Verlassen des Eingabefeldes für die Suche. Schau Dir dazu im Handbuch das Kapitel "Filtern von Datensätzen" im Kapitel "Makros" an. Kurz gesagt: Beide Formulare müssen als Variablen angesprochen werden können. In einem Formular wird beim Verlassen des Eingabefeldes ein Update ausgeführt, bei anderen Formular anschließend ein reload.

Gruß

Robert

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: Sa 4. Jan 2020, 19:48
von Knox
Hallo Miho, funktioniert mit folgendem kleinem Makro.

Code: Alles auswählen

Sub Relaod 
Dim oForm as Object 
oForm = ThisComponent.DrawPage.Forms(0) 
oForm.updateRow()
oForm.reload 
End Sub
Bei den Steuerelement-Eigenschaften des Textfeldes> Ereignisse > nach dem Aktualisieren Makro lt. Code zuweisen. Das funktioniert auch mit mehreren Filter-Feldern. Die Filterung wird neben der Enter-Taste aber auch ausgelöst, wenn das Textfeld nach Änderung mit TAB-Taste verlassen wird oder wenn mit der Maus in das Formular geklickt wird. Das ist in meinem Fall auch erwünscht, weil ich die Filterfelder überwiegend mit der Tastatur ohne Mauseinsatz abarbeiten will.

Gruß Knox

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: So 5. Jan 2020, 20:27
von miho
Hallo alle zusammen!

Habe verschiedenes asuprobiert; das Makro von Knox würde meinen Bedürfnissen sehr gut entsprechen. Auch ich möchte die Filterung möglichst ohne Maus handhaben... Allerdings bekomme ich folgende Fehlermeldung:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Fehler in der Funktionsfolge..


Diese bezieht sich auf die Zeile: oForm.updateRow()

Kann es sein, dass diese von der eingebettenden Firebird DB nicht erkannt wird? Oder was kommt sonst noch in Frage?

Mit Gruss miho

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: So 5. Jan 2020, 20:50
von RobertG
Hallo miho,

bevor ein Formular mit einem updateRow() versehen werden kann muss natürlich der Datensatz bereits existiert haben. Bei Filterformularen starte ich immer damit, dass ich eine Tabelle erstelle, als Primärschlüssel ein Ja/Nein-Feld nehme und dann den ersten Datensatz mit einem Klick auf "Ja" stelle. Nur dieser Datensatz wird nachher verändert.
Im Formular wird dann nur der aktuelle Datensatz mit dem Filter "Ja" angezeigt und nur eine Datenänderung erlaubt.

Das von Knox beschriebene Makro geht davon aus, dass Du diesen Datensatz ändern willst - deshalb updateRow(). Das Makro geht weiter davon aus, dass die eigentlichen Daten in einem Unterformular von dem Filterformular liegen. Deshalb steht da anschließend für das gleiche Formular ein reload.

Gruß

Robert

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: Sa 11. Jan 2020, 16:52
von miho
Hallo zusammen!

Danke für die Antworten. Ich habe sie studiert und versucht, das ganze umzusetzen, bekomme es aber nicht hin. Ich lege mal eine vereinfachte Test-DB bei. Vielleicht kann mir jemand helfen. Ich würde gerne im Suchfeld im Formular "Traubenannahme" ein Textfragment eingeben könnnen und das Filterergebniss anschliessend in der Tabelle darunter per ENTERTASTE anzeigen lassen. Ohne Makro funktioniert das ganze gut, nur muss ich dann zusätzlich auf den Button "Suchen" klicken...

Herzlichen Dank!

miho

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: Sa 11. Jan 2020, 18:19
von RobertG
Hallo Miho,

ändere zuerst das Makro:

Code: Alles auswählen

Sub Relaod (oEvent AS OBJECT)
IF oEvent.KeyCode = 1280 THEN
Dim oForm as Object 
oForm = ThisComponent.DrawPage.Forms.getByName("filter") 
oField = oEvent.Source.model
oField.commit
oForm.updateRow()
oForm2 = ThisComponent.DrawPage.Forms.getByName("search")
oForm2.reload 
END IF
End Sub
Damit sind die Formulare richtig addressiert und auch die Entertaste kommt über den KeyCode rein.

Binde das Makro an "Taste gedrückt", nicht an "Nach dem Aktualisieren".

Stelle das Formular für den Filter so ein, dass nur der aktuelle Datensatz geändert werden kann und dass der Zyklus der aktuelle Datensatz ist.

Gruß

Robert

Re: Filterbutton mit Enter-Taste auslösen

Verfasst: So 12. Jan 2020, 08:50
von miho
Hallo Robert!

Herzlichen Dank! Werde das genau studieren. Muss mich wohl besser in das Thema MAKROS einlesen...

Herzlichen Grüsse miho

Re: gelöst: Filterbutton mit Enter-Taste auslösen

Verfasst: So 19. Jan 2020, 22:11
von Knox
Hallo miho,
kann leider erst jetzt antworten, ich war durch einen Krankenhausaufenthalt außer Gefecht gesetzt.
Die Lösung von Robert ist makro-technisch sicher optimal.
Ich benutze das "Universal-Makro", weil ich im Formular 4 verschiedene Suchfelder benutze, (Textfelder+ Listenfelder), die jeweils das Makro auslösen. So kann ich die Filterung kaskadierend durch Benutzung der Tab-Taste optimal immer weiter einschränken. Für ein Suchfeld würde ich das Makro wahrscheinlich auch wie von Robert vorgeschlagen an "Taste gedrückt" anbinden.
Ich hatte schon deine Testdatei abgeändert, weil ich da die Lösung von Robert noch nicht auf dem Schirm hatte. Vielleicht hilft dir alternativ meine Vorgehensweise:
1. Makro bearbeiten > doppeltes End Sub entfernen
2. Formular bearbeiten und im Textfeld Filter > Formulareigenschaften > Daten hinzufügen > Nein (wichtig)
3. Formular bearbeiten > Menü Formular >Formularnavigator > Formulare Search auf Formular Filter ziehen (search wird zum Unterformular filter)

Filtern funktioniert jetzt mittels TAB, Enter, Klick in ein Unterformular und durch Betätigung der Schaltfläche Suchen.

Gruß Knox

Re: gelöst: Filterbutton mit Enter-Taste auslösen

Verfasst: So 19. Jan 2020, 22:22
von Knox
Hallo Miho,
noch ein Nachtrag:
Im Textfeld "searchtext" bei den Steuerelement-Eigenschaften > Allgemein > Die Aktivierungsreihenfolge auf 1 stellen.

Gruß Knox