[gelöst] Listbox vorbelegen funktioniert nicht

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

[gelöst] Listbox vorbelegen funktioniert nicht

Beitrag von sg1985 »

Hallo,

ich habe im Makro eine Variable oItemPos, die jetzt beispielsweise den Wert 5 hat. Dann zeichne in den Dialog mit der Listbox, befülle die Listbox und möchte nachher den Eintrag mit dem Index 5 vorselektieren in der Listbox.
Wenn ich den Dialog aufrufe, ist aber leider nichts vorselektiert (Listbox ist aber gefüllt und der Eintrag mit dem Index 5 ist auf jeden Fall vorhanden)

Hier der Code dazu:

Code: Alles auswählen

'Dialog erzeugen
oSheet = ThisComponent.getCurrentController().getActiveSheet()
oDialogModel = createUnoService( "com.sun.star.awt.UnoControlDialogModel" )
oDialogModel.Title = "Mitarbeiter Auswahl"
oDialogModel.Name = "Dialog_Mitarbeiter"
oDialogModel.BackgroundColor = RGB(230,230,230)'&HCCCCFF
oDialogControl = createUnoService( "com.sun.star.awt.UnoControlDialog" )
oDialogControl.setModel( oDialogModel )
oDialogControl.setPosSize( 120, 130, 400, 300, com.sun.star.awt.PosSize.POSSIZE)

'Listbox zeichnen
oModel = oDialogModel.createInstance("com.sun.star.form.component.ListBox")
oModel.DropDown = true
oDialogModel.insertByName("ListBox1", oModel)
oModel.Name = "ListBox1"
oControl = oDialogControl.getControl("ListBox1")
oModel.MultiSelection = false
oModel.BackgroundColor = RGB (255,255,255)
oModel.FontHeight = 7
oModel.LineCount = 1
oControl.setDropDownLineCount 12
oControl.setPosSize(170, 50, 170, 20, com.sun.star.awt.PosSize.POSSIZE)

'Listbox fuellen
[...]
oListBox1 = oDialogControl.getControl("ListBox1")
While oResultSet1.Next()
   b = oResultSet1.getString(1) '1. Spalte in Tabelle
   aListe1 = oListBox1.getModel().StringItemList
   n = UBound(aListe1())
   redim preserve aListe1(n + 1)
   aListe1 (n+1) = b
   oListBox1.getModel().StringItemList = aListe1
Wend

'Eintrag mit Index 5 vorselektieren
oListBox1.SelectItemPos(oItemPos_global, true)   

oDialogControl.setVisible( True )
oDialogControl.execute
oDialogControl.endExecute
Anm: die Variable oItemPos_global ist in einem anderen Modul global definiert, hat aber hier sicher den Wert 5, habs mir per msgbox ausgeben lassen...

Weiß jemand, was ich da falsch mache?

Edit: sobald ich der Listbox1 einen Event Listener hinzufüge und die Codezeile oListBox1.SelectItemPos(oItemPos_global, true) im Listener habe, funktioniert es komischerweise... aber das ist ja leider nicht Sinn der Sache und unbrauchbar für mich, da der Eintrag mit dem Index oItemPos ja schon vorselektiert sein soll, wenn der Dialog gestartet wird.
Zuletzt geändert von sg1985 am Di, 05.08.2008 14:22, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Listbox vorbelegen funktioniert nicht

Beitrag von komma4 »

mmmh, sieht erstmal gut aus....

Index 5 bedeutet den sechsten Eintrag der Liste zu wählen - den hast Du auch (oder nur gesamt 5)?
Geht es "immer" um diesen Eintrag, oder möchtest Du den letzten?



P.S.: RGB(230,230,230) ist ein Hellgrau (10%) (&HE6E6E6), nicht der Wert hinter dem Kommentarzeichen &HCCCCFF, das ist RGB(204,204,255), ein helles BlauGrau !
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox vorbelegen funktioniert nicht

Beitrag von sg1985 »

Der Eintrag hat den Index 5, d.h. es ist eigentlich der 6. Eintrag (da es bei 0 beginnt)... aber das war jetzt nur zur Vereinfachung der Darstellung meines Problems gedacht...
Ich habe eigentlich eine globale Variable die mir den ausgewählten Eintrag der Listbox vom Dialog1 speichert und im Dialog2 (der Inhalt der Listbox ist wieder der gleiche) genau diesen Eintrag wieder selektiert. Zu diesem Zweck speicher ich die Position des Eintrags eben in oItemPos ab (also zusammenfassend gesagt ist die Position immer vorhanden, da es sich bei beiden Listboxen um den gleichen Inhalt handelt und immer gleich viele Einträge sind)
Wenn ich mir diese Variable dann im Dialog2 per msgbox ausgeben lass, enthält sie auch wieder die richtige Position, allerdings wird eben nix vorselektiert (außer ich benutze einen Listener wie im 1. Posting beschrieben, was für mich aber nicht brauchbar ist in dem Fall), und ich versteh absolut nicht warum :(
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox vorbelegen funktioniert nicht

Beitrag von sg1985 »

hat niemand eine Idee, was falsch sein könnte?! :(
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox vorbelegen funktioniert nicht

Beitrag von sg1985 »

ich habe das Beispiel jetzt sogar noch vereinfacht und nicht mal da funktioniert das Vorbelegen der Listbox (obwohl ich den Code in zahlreichen Postings so gesehen habe, also müsste es theor. so funktionieren)

Code: Alles auswählen

sub makro4

oSheet = ThisComponent.getCurrentController().getActiveSheet()

'Dialog erzeugen
oDialogModel = createUnoService( "com.sun.star.awt.UnoControlDialogModel" )
oDialogModel.Title = "Mitarbeiter Auswahl"
oDialogModel.Name = "Dialog_Mitarbeiter"
oDialogModel.BackgroundColor = RGB(230,230,230)'&HCCCCFF
oDialogControl = createUnoService( "com.sun.star.awt.UnoControlDialog" )
oDialogControl.setModel( oDialogModel )
oDialogControl.setPosSize( 120, 130, 400, 300, com.sun.star.awt.PosSize.POSSIZE)

'Listbox erzeugen
oModel = oDialogModel.createInstance("com.sun.star.form.component.ListBox")
oModel.DropDown = true
oDialogModel.insertByName("ListBox1", oModel)
oModel.Name = "ListBox1"
oControl = oDialogControl.getControl("ListBox1")
oModel.MultiSelection = false
oModel.BackgroundColor = RGB (255,255,255)
oModel.FontHeight = 7
oModel.LineCount = 1
oControl.setDropDownLineCount 12
oControl.setPosSize(170, 50, 170, 20, com.sun.star.awt.PosSize.POSSIZE)

'Listbox befüllen und Eintrag mit Index 1 vorselektieren
oListBox1 = oDialogControl.getControl("ListBox1")
oListBox1.getModel()l.StringItemList = Array( "Properties", "Methods", "Services", "Interfaces" )
oListBox1.selectItemPos( 1, TRUE ) 

oDialogControl.setVisible( True )
oDialogControl.execute
oDialogControl.endExecute

end sub
Der Eintrag "Methods" sollte also beim Starten des Dialogs vorselektieren sein, jedoch ist die Listbox nur befüllt und es ist kein Eintrag ausgewählt.
Was läuft denn hier falsch?
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Listbox vorbelegen funktioniert nicht

Beitrag von turtle47 »

sg1985 hat geschrieben:Was läuft denn hier falsch?
Du versuchst die Position zu setzen bevor das Objekt erzeugt ist.
Folgendes sollte funktionieren:

Code: Alles auswählen

oDialogControl.setVisible( True )
oListBox1.SelectItemPos( 1, True ) 
Und, geht´s jetzt?
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox vorbelegen funktioniert nicht

Beitrag von sg1985 »

juhu das war der Fehler!! Danke danke danke! Ich habe wirklich schon ewig herumgesucht...
Antworten