Listbox von Basic aus verwenden

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

burli
**
Beiträge: 22
Registriert: Do, 31.03.2005 13:25
Wohnort: Petersberg
Kontaktdaten:

Listbox von Basic aus verwenden

Beitrag von burli »

Hi,
ich steige gerade in OOBase ein um ein paar Formulare für meine Datenbanken zu erstellen. Bin auch schon recht weit gekommen, aber bei einigen grundlegend Basic Funktionen bin ich jetzt hängengeblieben und komme nicht weiter.

Und zwar hab ich noch nicht rausfinden können wie man feststellt welches Item in einer ListBox angeklickt wurde und wie man "von Hand" eine Listbox aus einer Datenbank füllen kann.

Gibt es dazu irgendwelche Beschreibungen, Hilfen, Tutorials? Ich hab die Office Hilfe schonmal überflogen, konnte aber noch nix finden was mir bei meinem Problem weitergeholfen hat

gruß
burli
burli
**
Beiträge: 22
Registriert: Do, 31.03.2005 13:25
Wohnort: Petersberg
Kontaktdaten:

Beitrag von burli »

Um nochmal konkreter zu fragen: ich habe eine Listbox auf einem Formular. Wie kann ich in Basic darauf zugreifen?

In allen Beispielen die ich bisher gefunden hab findet sich sowas wie

Code: Alles auswählen

Dim ListBox as Object
ListBox = oDialog.getControl("ListBox1")
Muß ich eine bereits existierende Listbox nochmal anlegen? Oder irgendwie verknüpfen? Oder kann ich zb über Formularname.Listboxname darauf zugreifen?

Irgendwie hat mir bisher nix weitergeholfen
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey burli,

um auf die Listbox zuzugreifen, nutzt du deinen Code:

Code: Alles auswählen

Dim ListBox as Object
ListBox = oDialog.getControl("ListBox1") 
wobei natürlich sowohl der Dialog als auch die Listbox mit dem Namen "ListBox!" existieren muss! Name ist "casesensitiv".
Nun solltest du dich mal mit den Debug Methoden dbg_methods ud dbg_properties vertraut machen, zwigen Sie dir doch die möglichen Eigenschaften und Methoden eines Objektes.

Um die Listbox zu Füllen, gibt es die Eigenschaft "stringItemList" womit du einen Array mit den Listeneinträgen (Strings) übergibst. also z.B.

Code: Alles auswählen

dim aListe()
aListe = array("eins", "zwei", "drei")
ListBox.StringItemList = aListe()
Die Listbox hat nun sowohl die Einträge als auch die Reihenfolge (Indices) gespeichert. Um einen gewählten Eintrag zu erhalten, nutzt du die Eigenschaft "SelectedItems", welche dir eine Liste (Array) mit den Indexzahlen der gewählten Einträge liefert. Um den ersten gewählten Eintrag zu erhalten, schreibst du zum Beispiel:

Code: Alles auswählen

dim aIndexListe()
aIndexListe = ListBox.SelectedItems
msgbox aListe(aIndexListe(0))
Also - über den Index erhälst du den gewählten Eintrag . Es gibt noch ein paar andere Möglichkeiten, nur das führt hier zu weit. Ein gutes Buch hilft....

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
burli
**
Beiträge: 22
Registriert: Do, 31.03.2005 13:25
Wohnort: Petersberg
Kontaktdaten:

Beitrag von burli »

Hi,
danke für die Antwort. Die Listbox ist aber nicht auf einem Dialog sondern auf einem Formular von OOBase. In Beschreibungen ist aber immer nur von Dialogen die Rede gewesen. Verhält sich das da dann genauso?

Schonmal danke für die Antwort
Grüße
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Burli,

hmm, du hat recht., der Code war auf "Dialog" gemüzt, meine Erklärung aber auf "Formular". Die Listbox ist ähnlich, im Dialog hast du jedoch mehr Möglichkeiten. Das, was ishc sagte, bezog sich auf das Formular ;-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
burli
**
Beiträge: 22
Registriert: Do, 31.03.2005 13:25
Wohnort: Petersberg
Kontaktdaten:

Beitrag von burli »

Heist das das der Code

Code: Alles auswählen

Dim ListBox as Object
ListBox = oDialog.getControl("ListBox1")
sowohl für Dialog als auch für Formulare funktioniert? Damit schaffe ich mir ja eine Referenz der Listbox im Script mit der ich dann auf das eigenetliche Objekt zugreifen kann. Oder brauche ich statt oDialog ein Equivalent für Formulare?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Burli,
sowohl für Dialog als auch für Formulare funktioniert?
Nein. Der gilt nur für Dialoge! Nur das ERgebnis ist ähnlich: Du erhälst das Objekt des Kontrollelementes - hier alos der Listbox. Und das hat jetzt verschiedene Eigenschaften und Methoden - und die sind ähnlich ;-)

Um die Listbox im Formular zu erhalten, holst du dir das Objekt wie folgt:

Code: Alles auswählen

dim oDoc as object, oform as object, oCtl as object
oDoc = thisComponent   'das Dokument
REM das erste Formular eines Writer-Dokumentes
oForm = thisComponent.drawpage.Forms(0) 
REM dein Kontrollelement
oCtl = oForm.getByName("ListBox1")
Das gilt allerdings nur bei Writer-Dokumenten. Bei Calc hat jede Tabelle eine Draw-Page - und Formulare sind Elemente dieser Drawpage.
Hast du mehrer Formulare definiert, kannst du sie auch über die Namenseigenschaft errreichen, eben wie gehabt:

Code: Alles auswählen

oForm = thisComponent.drawpage.Forms.getByName("meinFormular")
Viele Grüße
Thomas[/list]
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
burli
**
Beiträge: 22
Registriert: Do, 31.03.2005 13:25
Wohnort: Petersberg
Kontaktdaten:

Beitrag von burli »

Danke, jetzt kommen wir der Sache schon näher. Ich arbeite allerdings weder mit Writer noch mit Calc sondern mit Base. Aber soweit ich das bisher gesehen hab basieren die Formulare auf Writer bzw verhalten sich ganz ähnlich.

Ok, ich dank dir schonmal für die Hilfe. Vielleicht komm ich damit nen Schritt weiter
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Burli,

Base ist "nur" eine Containerdatei. Alle dort erzeugten Formulare oder Berichte sind "reinrassige" Writer-Dateien - nur, dass sie im Container gespeichert werden. Insofern... kein Unterschied bei der Programmierung.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
burli
**
Beiträge: 22
Registriert: Do, 31.03.2005 13:25
Wohnort: Petersberg
Kontaktdaten:

Beitrag von burli »

Hi Thomas,
alles klar, ich hab sowas ähnliches vermutet. Danke erstmal für die Hilfe. Denke damit komme ich mal ein Stück weiter.

Grüße
Burli
Antworten