Seite 1 von 1
Listbox von Basic aus verwenden
Verfasst: So, 30.07.2006 18:40
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
Verfasst: So, 30.07.2006 19:39
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
Verfasst: Di, 01.08.2006 14:23
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
Verfasst: Di, 01.08.2006 14:30
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
Verfasst: Di, 01.08.2006 14:48
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
Verfasst: Di, 01.08.2006 15:35
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?
Verfasst: Di, 01.08.2006 15:50
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]
Verfasst: Di, 01.08.2006 16:00
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
Verfasst: Di, 01.08.2006 17:04
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
Verfasst: Di, 01.08.2006 17:12
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