Seite 1 von 1

Kombinationsfeld automatisch aufklappen

Verfasst: Mi, 12.09.2012 21:18
von Klinker
Ich habe in einem Formular ein "Tabellenkontrollfeld" mit diversen Spalten, u.a. mit einem Kombinationsfeld.
Ich möchte erreichen, dass das Kombinationsfeld beim Erreichen per Tab-Taste oder Returntaste "automatisch" aufklappt und der erste Eintrag angezeigt wird. Leider habe ich bislang kein Makro o.ä. gefunden.
Da ich hier neu bin: Ich hoffe die Frage an der richtigen Stelle gestellt zu haben.
Für eine Hilfe wäre ich sehr dankbar.

Re: Kombinationsfeld automatisch aufklappen

Verfasst: Mo, 17.09.2012 08:17
von juetho
Hallo, die Frage ist nicht zu schlicht oder unpassend formuliert. Ich sehe das Problem darin, dass im Designer und im Handbuch die Eigenschaften mit deutschen Begriffen benutzt werden, aber für Makros englische Bezeichner benötigt werden; außerdem ist die Objektstruktur bei OO etwas undurchsichtig. Nach der Suche nach geeigneten Eigenschaften für Kontrollfelder bin ich auf folgende Idee gekommen:
  • Eine Listbox (das scheint der englische Begriff für das Kombinationsfeld zu sein) kann mit der Methode makeVisible(Pos) ein bestimmtes Element anzeigen. Die Beschreibung "scrolls" deutet darauf hin, dass dazu die Liste aufgeklappt wird.
  • Diese Methode wird aufgerufen mit einem Makro, das dem Ereignis "Bei Fokuserhalt" zugeordnet wird.
  • Ob das auch mit einer Listbox funktioniert, die in das Tabellenkontrollfeld eingebettet ist, habe ich nicht untersucht.
Das Makro müsste etwa so aussehen:

Code: Alles auswählen

Sub myListboxEnter( oEvent as Object )
' bestimme das Feld
myListbox =  thisComponent.drawpage.forms.MainForm.IndexByName( oEvent.Source.Model.Name )
myListbox.makeVisible(2)
End Sub
Mit dem Parameter in der Klammer wird der Name der Listbox geholt; mit dem Konstrukt davor wird die Hierarchie der Elemente im Formular-Navigator durchgegangen. Das musst du natürlich an deine Situation anpassen.

Viel Erfolg! Jürgen

Re: Kombinationsfeld automatisch aufklappen

Verfasst: Mo, 17.09.2012 20:28
von Klinker
Hallo Jürgen, besten Dank für Deine Bemühungen.
Leider gibt es ein Problem. Ich habe zum -Testen- ein Formular mit zwei Textfeldern und einem
Kombinationsfeld erstellt. Das Kombi hat Deine Prozedur (bei Focuserhalt) bekommen.
Bei Abarbeiten der Prozedur im Einzelschrittmodus kommt die Fehlermeldung:
..Eigenschaft oder Methode nicht gefunden: DrawPage
Beim Erreichen des Kombifeldes im Formular kommt die Fahlermeldung:
... Eigenschaft oder Methode nicht gefunden: IndexByName

Nochmal zum Sinn der Aktion:
Ich möchte mit dem "automatischen" Aufklappen erréichen, dass die Dateneingabe im
Datagrid mit mehreren Spalten (und mehreren Kombifeldern) ohne Maus funktioniert.
Die Dateneingabe wäre damit erheblich einfacher.

Vielleicht kannst Du ja nochmal antworten.
Schon jetzt besten Dank

Re: Kombinationsfeld automatisch aufklappen

Verfasst: Di, 18.09.2012 12:19
von juetho
Das Problem mit "drawpage unbekannt" u.ä. hatte ich gestern Nachmittag auch. Es scheint so zu sein, dass innerhalb einer Ereignisbehandlung thisDocument und dessen Elemente nicht immer im richtigen Umfang vorhanden sind; auch habe ich noch keine schöne Übersicht über die Eigenschaften und Methoden von Event.Source und Model gefunden. Aber bei meinen eigenen Versuchen gestern bin ich auf folgende kurze Lösung gekommen:

Code: Alles auswählen

Sub myListboxEnter( oEvent as Object )
    ' bestimme das Feld
    myListbox = oEvent.Source
    myListbox.makeVisible(2)
End Sub
"Quelle des Ereignisses" ist natürlich das Feld, das das Ereignis auslöst. Bei StarBasic bin ich mir nach wie vor unsicher, ob das Ergebnis der ersten Zuweisung vom Datentyp Object ist (also nicht genauer spezifiziert) oder ob es vom gewünschten Typ Listbox ist.

Wenn es dir nur darum geht, dass auf die Maus verzichtet werden kann, dann gewöhn' dir einfach die Tastenkombination Alt + (Pfeil runter) an. :? Jürgen

Nachtrag: Listbox ist falsch; dazu gehört die Übersetzung Listenfeld. Da ich im Moment keine Idee für einen Test mit einem Kombinationsfeld habe, kann ich nur raten, dass Combobox korrekt ist. Für die Lösung deines Problems könnte das aber irrelevant sein, da eine Combobox eine Art erweiterter Listbox ist:
used when a list box combined with a static text control or an edit control is needed.
So gut wie alle Eigenschaften und Methoden, die es zur Listbox gibt - siehe Dokumentation -, gelten deshalb auch für eine Combobox.

Re: Kombinationsfeld automatisch aufklappen

Verfasst: Di, 18.09.2012 19:44
von F3K Total
Hallo zusammen,
Ich empfehle Euch die Verwendung eines Inspection-Tools wie MRI oder Xray
Damit könnt ihr alle OOo-Dokumente hinsichtlich ihres Aufbaues/Eigenschaften/Methoden analysieren.
z.B. mit dem Befehl:

Code: Alles auswählen

xray oEvent
oder

Code: Alles auswählen

mri oEvent
und dann weiter über

Code: Alles auswählen

.Source
und

Code: Alles auswählen

.Model
... aber dann das Makro nicht mit "bei Fokuserhalt" sondern z.B. mit "Maustaste losgelassen" starten, sonst kommt ihr in eine Schleife die nur mit dem Taskmanager abzubrechen ist.
Gruß R

Re: Kombinationsfeld automatisch aufklappen

Verfasst: Di, 18.09.2012 20:43
von juetho
F3K Total hat geschrieben:Ich empfehle Euch die Verwendung eines Inspection-Tools wie MRI oder Xray
Damit könnt ihr alle OOo-Dokumente hinsichtlich ihres Aufbaues/Eigenschaften/Methoden analysieren.
Ich weiß, das muss ich mir vornehmen.
... aber dann das Makro nicht mit "bei Fokuserhalt" sondern z.B. mit "Maustaste losgelassen" starten, sonst kommt ihr in eine Schleife die nur mit dem Taskmanager abzubrechen ist.
Das habe ich auch gemerkt. Es gibt noch eine Notlösung: Haltepunkt setzen; wenn der Debugger dort stoppt, kann das Formular geschlossen werden. :shock: Jürgen