ComboBox indexieren, Listeneintrag auswählen
Moderator: Moderatoren
ComboBox indexieren, Listeneintrag auswählen
Hallo,
Die Combobox die ich steuern möchte liegt innerhalb eines Formulars. Die Daten kommen aus einer (concat) Abfrage. Vorn im String steht eine Nummer, dann ein Doppelpunkt. Die Nummer ist der Schlüssel einer Datenbanktabelle.
Nun meine Frage:
Wie kann ich den Text der Combobox anzeigen und aktivieren, der den von mir gesuchten Schlüssel enthält?
Wenn ich mich durch die Eigenschaften der ComboBox suche finde ich nichts, die Liste auf einen Index zu setzen. Kann mir jemand einen Anstoß geben?
Grüße
Christian
Die Combobox die ich steuern möchte liegt innerhalb eines Formulars. Die Daten kommen aus einer (concat) Abfrage. Vorn im String steht eine Nummer, dann ein Doppelpunkt. Die Nummer ist der Schlüssel einer Datenbanktabelle.
Nun meine Frage:
Wie kann ich den Text der Combobox anzeigen und aktivieren, der den von mir gesuchten Schlüssel enthält?
Wenn ich mich durch die Eigenschaften der ComboBox suche finde ich nichts, die Liste auf einen Index zu setzen. Kann mir jemand einen Anstoß geben?
Grüße
Christian
Viele Wege führen zum Ziel, aber alle nach Rom.
Hey Christian,
sorry, verstehe deine Frage nicht
Wie "füllst" du denn die Box? Ist die Combobox überhaupt das richtige Kontrollelement?
Bitte etwas ausführlicher.
Ein paar Grundsätze:
Die Combobox ist an sich eine Kombination aus Textfeld und Listbox. Der Unterschied zur Listbox ist, dass du in eine Combobox manuelle Einträge vornehmen kannst - du bist also nicht auf die vordefinierten angewiesen. In Kombination mit Datenbanken ist die Combobox daher immer dann mit Vorsicht zu geniessen, wenn sie - wie offentsichtlich bei dir - als Auswahlschlüssel dienen soll. Da nimm lieber die Listbox
Im übrigen liefert dir die Text-Eigenschaft die aktuell angezeigte Werte im Auswahlfeld. Und einen Eintrag der Listbox "selektierst" du mit der Methode "selectItem(sItem, true)" bzw. "selectItemPos(iPos, true)". Ein selektierter Eintrag wird automatisch in das Textfekd kopiert.
Viele Grüße
Thomas
sorry, verstehe deine Frage nicht
Was willst du anzeigen? Text der Combobox? Was für Text?Wie kann ich den Text der Combobox anzeigen und aktivieren, der den von mir gesuchten Schlüssel enthält?
Wie "füllst" du denn die Box? Ist die Combobox überhaupt das richtige Kontrollelement?
Bitte etwas ausführlicher.
Ein paar Grundsätze:
Die Combobox ist an sich eine Kombination aus Textfeld und Listbox. Der Unterschied zur Listbox ist, dass du in eine Combobox manuelle Einträge vornehmen kannst - du bist also nicht auf die vordefinierten angewiesen. In Kombination mit Datenbanken ist die Combobox daher immer dann mit Vorsicht zu geniessen, wenn sie - wie offentsichtlich bei dir - als Auswahlschlüssel dienen soll. Da nimm lieber die Listbox

Im übrigen liefert dir die Text-Eigenschaft die aktuell angezeigte Werte im Auswahlfeld. Und einen Eintrag der Listbox "selektierst" du mit der Methode "selectItem(sItem, true)" bzw. "selectItemPos(iPos, true)". Ein selektierter Eintrag wird automatisch in das Textfekd kopiert.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo Thomas,
danke für den Tip. Zur Erklärung:
in der ComboBox stehen Einträge in folgender Form:
123: Joseph Maier (kommt aus concat(id,':',Vorname,Nachname))
aus einem Select bekomme ich 123. Nun muss ich die Combobox nach 123 durchsuchen (Schleife mit InStr (oControl.text,":")).
In Kylix konnte ich die List-, bzw. Combobox mit dem Index durchsuchen, den String auslesen und bekam damit die Position. Wenn ich Deine Antwort richtig deute, kann ich mit selectItemPos die Listbox innerhalb einer Schleife durchsuchen bis ich den passenden Textteil (123) gefunden habe.
Nun stellt sich nur noch die Frage wie ich and die Listbox-Eigenschaften einer ComboBox komme. Könntest Du mir einen Tipp geben?
Werde das baldmöglichst probieren.
Nochmal danke
Grüße
Christian
danke für den Tip. Zur Erklärung:
in der ComboBox stehen Einträge in folgender Form:
123: Joseph Maier (kommt aus concat(id,':',Vorname,Nachname))
aus einem Select bekomme ich 123. Nun muss ich die Combobox nach 123 durchsuchen (Schleife mit InStr (oControl.text,":")).
In Kylix konnte ich die List-, bzw. Combobox mit dem Index durchsuchen, den String auslesen und bekam damit die Position. Wenn ich Deine Antwort richtig deute, kann ich mit selectItemPos die Listbox innerhalb einer Schleife durchsuchen bis ich den passenden Textteil (123) gefunden habe.
Nun stellt sich nur noch die Frage wie ich and die Listbox-Eigenschaften einer ComboBox komme. Könntest Du mir einen Tipp geben?
Werde das baldmöglichst probieren.
Nochmal danke
Grüße
Christian
Viele Wege führen zum Ziel, aber alle nach Rom.
Hey Christian,
Du hast schon eine gefüllte Listbox und möchtest daraus einen Eintrag per Makro "aktiv" schalten, also selktieren. Und dieser Eintrag beginnt mit deiner Zahl?
Wenn das so ist:
Mit der Methode "StringItemList()" bekommst du einen Array aller Einträge der Combobox. Die kannst du nun durchsuchen (per schleife) und den Index feststellen.
Über die Methode "selectItemPos(iPos, true)" kannst du anschliessend den entsprechenden Eintrag "selektieren", also in die Box eintragen. Dabei ist iPos die Nummer des Listeneintrages - entspricht der Indexnummer im Array der Einträge.
Viele Grüße
Thomas
Ähm, nein. Das war nur, weil ich nicht genau verstand, was du eigentlich willst. Also, nochmal für mein Verständnis:Wenn ich Deine Antwort richtig deute, kann ich mit selectItemPos die Listbox innerhalb einer Schleife durchsuchen bis ich den passenden Textteil (123) gefunden habe.
Du hast schon eine gefüllte Listbox und möchtest daraus einen Eintrag per Makro "aktiv" schalten, also selktieren. Und dieser Eintrag beginnt mit deiner Zahl?
Wenn das so ist:
Mit der Methode "StringItemList()" bekommst du einen Array aller Einträge der Combobox. Die kannst du nun durchsuchen (per schleife) und den Index feststellen.
Über die Methode "selectItemPos(iPos, true)" kannst du anschliessend den entsprechenden Eintrag "selektieren", also in die Box eintragen. Dabei ist iPos die Nummer des Listeneintrages - entspricht der Indexnummer im Array der Einträge.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo Thomas,
danke für die schnelle Antwort. Grundsätzlich habe ich Dich wohl richtig verstanden und Du mich. Beim probieren stehe ich vor folgendem Problem. Meine ComboBox kennt die Methode 'selectItemPos' nicht. Die IDL sagt, dass es die Methode gibt. xRay und DBG_Methods sagen ätsch, genauso der Interpreter.
Basic-Laufzeitfehler. Methode oder Eigenschaft nicht gefunden. (oControl.getItemCount()) setze ich I = 1 to 1000 kommt die Fehlermeldung bei getItemPos(I,true)) ListBox verhält sich genauso. (schon mal getauscht)
Hilfe!
Gruß
Christian
danke für die schnelle Antwort. Grundsätzlich habe ich Dich wohl richtig verstanden und Du mich. Beim probieren stehe ich vor folgendem Problem. Meine ComboBox kennt die Methode 'selectItemPos' nicht. Die IDL sagt, dass es die Methode gibt. xRay und DBG_Methods sagen ätsch, genauso der Interpreter.
Code: Alles auswählen
oControl = oMyFormDoc2.getbyname("ComboBoxReferent")
xRay oControl
for I = 1 to oControl.getItemCount()
oControl.getItemPos(I,true)
msgBox oControl.Text
next I
Hilfe!
Gruß
Christian
Viele Wege führen zum Ziel, aber alle nach Rom.
Hey Christian,
also, ich schau mal auf den Code:
Also:
Schon das wird nicht funktionieren. Die Combobox kennt die Methode nicht. Das müsste heissen:
Das Array ist dimensioniert - nicht die Liste!
um jetzt beispielsweise den 2. Eintrag zu aktivieren (Index 1) heisst es dann:
Du hast aber recht, die Methode selectItemPos() gibt es zwar bei Listboxen, nicht aber bei der Combobox 
Gruss
Thomas
also, ich schau mal auf den Code:
Wo bleibt der Interpreter stehen?Basic-Laufzeitfehler. Methode oder Eigenschaft nicht gefunden.
Also:
Code: Alles auswählen
for I = 1 to oControl.getItemCount()
Code: Alles auswählen
aListe = oControl.stringItemList
for i = 0 to ubound(aListe)
um jetzt beispielsweise den 2. Eintrag zu aktivieren (Index 1) heisst es dann:
Code: Alles auswählen
oControl.text = aListe(1)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
gelöst
Hallo Thomas,
Es bewahrheitet sich immer wieder, dass der Weg das Ziel ist. Ich habe heute viel gelernt. Vielen Dank.
So hat es funktioniert:
Grüße aus Bayern
Christian
Es bewahrheitet sich immer wieder, dass der Weg das Ziel ist. Ich habe heute viel gelernt. Vielen Dank.
So hat es funktioniert:
Code: Alles auswählen
oControl = oMyFormDoc2.getbyname("ComboBoxReferent")
aListe = oControl.stringItemList
for i = 0 to ubound(aListe)
J = InStr (aListe(I),":")
if Left(aListe(I),J-1) = refid then
oControl.text = aListe(I)
exit for
Endif
next I
Christian
Viele Wege führen zum Ziel, aber alle nach Rom.