Seite 1 von 1
[gelöst] Listbox-Problem
Verfasst: Sa, 02.02.2008 19:47
von jkl
Hi,
ich habe ein Problem mit der Listbox in einem Dialog. Folgenden Code habe ich eingefügt:
Code: Alles auswählen
Sub Dateneintragen
myDoc = thisComponent
oBib=DialogLibraries.LoadLibrary("Standard")
oDialog= CreateUnoDialog(Dialoglibraries.Standard.Dialog1)
dim i as integer
Rem Schueler1
Sheet1=myDoc.Sheets.getbyName(Schueler1)
For i = 0 to 390
if Sheet1.getCellbyPosition(0,i).string = "" then
exit for
end if
Next
rem Sheet1.getCellbyPosition(0,i).string = date
dim oListbox1 as object
oListbox1 = oDialog.getControl("Listbox1")
Sheet1.getCellbyPosition(1,i).string = oListbox1.getSelectedItem()
Sheet1.getCellbyPosition(2,i).string = oDialog.getControl("Listbox2").SelectedItem
End sub
Leider bekomme ich immer
(hier:Sheet1.getCellbyPosition(1,i).string = oListbox1.getSelectedItem())
die Meldung: "Objektvariable nicht belegt". Keine Ahnung an was das liegt. Die linke Seite der Gleichung funktioniert, aber beide Varianten funktioneren nicht. Ich komme einfach nicht weiter... Sieht vielleicht jemand wo der Fehler ist?
Vielen Dank auf jeden Fall
J. Kleis
Re: Listbox-Problem
Verfasst: So, 03.02.2008 16:31
von jkl
Hallo,
leider hat sich das Problem nicht lösen lassen. Ich habe es nicht geschafft auf die Listbox zuzugreifen. Jetzt habe ich es mit Textfeldern gemacht. Aber ich würde das gerne noch ändern. Vielleicht kann jemand helfen.
Also der Zugriff auf die Listbox hat nicht geklappt, weder auf die View-Ansicht, noch auf das Model-Objekt. Was mich gewundert hat, ich konnte auf das Objekt zugreifen (Beobachter bei gestopptem Probelauf), aber ich hatte dabei (meine ich jedenfalls) Zugriff auf das Dialog-Objekt und dann stimmen natürlich die Eigenschaften nicht.... Kann mir das Verhalten jedenfalls nicht erklären.
Vielleicht kann mir mal jemand ein Dokument mit einem funktionierendem Zugriff mailen, dann kann ich den Quellcode studieren...
Vielen Dank, falls sich jemand bemüht...
J. Kleis
Re: Listbox-Problem
Verfasst: So, 03.02.2008 18:19
von komma4
Hallo J.,
Zu Deinem ersten Posting habe ich mir den Code mal angeschaut, mögliche Antworten:
(A)
Du erhälst ein NULL-Objekt, wenn Du den Namen falsch schreibst: hier wird "ListBox1" generiert (im Basic-Editor); Du schreibst: "List
box1"
===
(B)
die Fehlermeldung liegt an der Tatsache, dass kein Eintrag ausgewählt wurde....
===
Fragen:
(C)
was soll die (Leer-)Schleife bis Zeile 391?
Zum Feststellen der letzten Zeichenkette in einem Bereich nehme einen Code wie:
Code: Alles auswählen
Dim Schueler1 as String
Schueler1 = "Tabelle2"
Sheet1=myDoc.Sheets.getbyName(Schueler1)
oBereich = Sheet1.getCellRangeByName( "A2:A99999" )
print oBereich.queryContentCells( _
com.sun.star.sheet.CellFlags.STRING _
).getRangeAddressesAsString()
===
(D) zum schnellen Füllen einer Listbox nehme Arrayfunktionen, das macht sich insbesondere bei grösseren Listen zeitlich bemerkbar:
Code: Alles auswählen
ReDim listElemente( 0 ) as String
enumZellen = oDaten.getCells().createEnumeration()
i = 0
While enumZellen.hasMoreElements()
ReDim Preserve listElemente( i )
listElemente( i ) = enumZellen.nextElement().getString()
i = i + 1
WEnd
[...]
' Setzen der Listbox mit Array von Strings
oListbox1.getModel().StringItemList = listElemente()
===
(E)
Für einen Benutzerdialog sind knapp vierhundert Einträge zu viel. Kannst Du die Anzahl nicht reduzieren, indem Du Gruppen bildest?
===
Jetzt lese ich, dass Du den Versuch aufgegeben hast?
Re: Listbox-Problem
Verfasst: So, 03.02.2008 18:28
von komma4
(F) wollte ich noch nachliefern:
If oListBox1.SelectedItemPos > -1 then
stellt fest, ob tatsächlich ein Eintrag ausgewählt wurde.
Nun ist meine Frau da - und nervt: sie hat Hunger und möchte gefüttert werden. Dem kann ich natürlich nicht widersprechen. Bis später.
Re: Listbox-Problem
Verfasst: So, 03.02.2008 19:35
von jkl
Hallo,
vielen Dank für die Antwort. So bin ich also direkt als ganz übler Hobby-Programmierer erkannt.
Zur Sache: Die Schleife ist lediglich zum Suchen der ersten freien Zelle. Die Zellen sollen aber nicht ausgelesen werden, sondern in die erste freie Zelle soll die Auswahl aus der Listbox eingetragen werden. Dein Code-Beispiel werde ich mir aber ansehen und wenn ich es verstehe nutzen
Die anderen Vorschläge passen nicht. Ich habe den Code jetzt nochmal außerhalb meines eigentlichen Dokuments geschrieben und auch da funktioniert es nicht:
Code: Alles auswählen
dim myDoc as object, oDialog as object, stext as string
dim oControl as object
dim stext as string
Sub Main
oBib=DialogLibraries.LoadLibrary("Standard")
oDialog = CreateUnoDialog(Dialoglibraries.Standard.Dialog1)
oControl=oDialog.getModel().getbyName("Listbox1")
rem oControl=oDialog.getControl("Listbox1")
rem oControl=oDialog.getControl("Listbox1").model()
oDialog.execute
End Sub
Sub dann
stext=oControl.getSelectedItem()
oDialog.endexecute
msgBox(stext)
End sub
Auch in diesem Beispiel (alle drei Varianten - siehe rem...) kann ich nicht auf das ausgewählte Element zugreifen. Vielleicht kann mir jetzt jemand helfen. Meine Notlösung ist übrigens eine Notlösung und ich würde sie gerne beenden.
J. Kleis
Re: Listbox-Problem
Verfasst: So, 03.02.2008 20:06
von turtle47
Hi J.Kleis,
versuche mal folgendes:
Code: Alles auswählen
Sub DialogAufruf
DialogLibraries.loadLibrary("Standard") 'Standardbibliothek laden
oForm = DialogLibraries.Standard.Dialog1 'Dialogname Dialog1
oDialog1 = CreateUnoDialog(oForm)
oDialog1.execute()
End Sub
Sub ListboxAuslesen
inhalt = oDialog1.GetControl("ListBox1")
Position = inhalt.selecteditempos
msgbox Position
Ergebnis() = inhalt.model.StringItemList()
msgbox Ergebnis(Position)
End Sub
Ist es das was Du suchst?
Jürgen
Re: Listbox-Problem
Verfasst: So, 03.02.2008 20:14
von jkl
Hi,
vielen Dank für die Antwort. Es bestätigt sich, was ich befürchtet habe... oder gehofft, weil ich dann nicht einfach nur zu doof bin. Hat dein Code bei dir funktioniert? Ich gehe einfach mal davon aus, dass "Ja".
Bei mir kommt die Fehlermeldung: Objektvariable nicht belegt!
Hat also nicht geholfen... Trotzdem Danke
Morgen werde ich noch einmal versuchen...
J. Kleis
Re: Listbox-Problem
Verfasst: So, 03.02.2008 20:21
von turtle47
ich gehe davon aus, dass die Fehlermeldung hier kommt:
Überprüfe mal den Namen Deiner Listbox.
Es ist z.B. ein Unterschied zwischen
Listbox1 oder
ListBox1
Edit: Mir ist gerade noch etwas aufgefallen! Setze am Anfang des Codes mal:
Re: Listbox-Problem
Verfasst: So, 03.02.2008 22:17
von jkl
Hallo,
was ich nicht mehr zu glauben wagte: Es klappt. Danke! Werde mich morgen daran machen meine Notlösung noch einmal zu überarbeiten....
Gute Nacht!
J. kleis