Seite 1 von 1

[gelöst] Listbox vorbelegen funktioniert nicht

Verfasst: Mo, 04.08.2008 11:09
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.

Re: Listbox vorbelegen funktioniert nicht

Verfasst: Mo, 04.08.2008 14:31
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 !

Re: Listbox vorbelegen funktioniert nicht

Verfasst: Mo, 04.08.2008 14:38
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 :(

Re: Listbox vorbelegen funktioniert nicht

Verfasst: Di, 05.08.2008 12:42
von sg1985
hat niemand eine Idee, was falsch sein könnte?! :(

Re: Listbox vorbelegen funktioniert nicht

Verfasst: Di, 05.08.2008 13:00
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?

Re: Listbox vorbelegen funktioniert nicht

Verfasst: Di, 05.08.2008 13:33
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?

Re: Listbox vorbelegen funktioniert nicht

Verfasst: Di, 05.08.2008 13:39
von sg1985
juhu das war der Fehler!! Danke danke danke! Ich habe wirklich schon ewig herumgesucht...