Listbox im Formular: Einträge hinzufügen und löschen?

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

Moderator: Moderatoren

Steffan
****
Beiträge: 125
Registriert: Mi, 21.06.2006 10:07
Wohnort: Dresden

Listbox im Formular: Einträge hinzufügen und löschen?

Beitrag von Steffan »

Hallo zusammen,

wie die Überschrift schon sagt: Ich habe in einem Formular eine Listbox in die die ich per Makro Einträge hinzufügen und auch wieder entfernen will. Komischerweise scheint diese Listbox nicht vollständig die gleichen Eigenschaften / Methoden zu haben, wie eine Listbox in einem Dialog. So habe ich z.B. addItem() und removeItem() nicht gefunden. Prinzipiell habe ich eine etwas umständliche andrere Möglichkeit gefunden das zu lösen, allerdings gelingt es mir nicht den letzten Eintrag in der Listbox wieder zu löschen. Weiß jemand von Euch Rat?

Danke für Eure Hilfe,
Steffan.

Code: Alles auswählen

dim arr()
dim iAdr() as integer

Sub addToDock
	oForm = ThisComponent.drawpage.forms.getbyName("frmAdr")
'Werte aus Formular lesen
	iID= oForm.Columns(0).getInt
	sCo= oForm.Columns(1).getString
	sNa= oForm.Columns(5).getString
	if sNa="" then sNa=sCo

'Zugriff auf Listbox
	oLstDock=oForm.getbyname("lstDock")

	iMax=ubound(oLstDock.stringitemlist)
'Vorhandene Einträge in Array lesen
	arr()=oLstDock.stringitemlist
'Array redimensionieren 
	redim preserve arr(iMax+1)
	redim Preserve iAdr(iMax+1)
'Werte (ID, Name) in Arrays schreiben
	arr(iMax+1)=sNa:iAdr(iMax+1)=iID
'Array der Listbox als Werteliste zuweisen
	oLstDock.stringitemlist=arr()
End Sub

Sub removeFromDock
	oForm = ThisComponent.drawpage.forms.getbyName("frmAdr")
	oLstDock=oForm.getbyname("lstDock")

'Selektierte Zeile ermitteln
	iSel=oLStDock.selectedItems
'nichts ausgewählt -> Abbruch
	if ubound(iSel)=-1 then exit sub
'Vorhandene Einträge in Array lesen
	arr()=oLstDock.stringitemlist
	iMax=uBound(arr())
'Folgewerte nachrücken
	if iSel(0)<iMax then
		for i=iSel(0) to iMax-1
			arr(i)=arr(i+1)
			iAdr(i)=iAdr(i)+1
		next i
	endif	
'Arrays redimensionieren / Löschen
	if iMax>0 then 
		redim preserve arr(iMax-1) 
		redim Preserve iAdr(iMax+1) 
		oLstDock.stringitemlist=arr()
	else 
		erase arr
		erase iAdr
		oLstDock.stringitemlist=arr()   '<- Fehler hier beim zuweisen eines leeren Arrays
	endif
end sub
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Steffan,
Gibt es außerdem noch irgendwo im Netz eine Liste mit den Befehlen vom Basic?
Das stimmt :D

Dein Weg ist auch ok, da ist nichts gegen auszusetzen. Bei Formularen musst du selbst den "StringItemArray" verwalten", d.h. Einträge hinzufügen oder entfernen. Den kompletten Array weist du dann der Box zu.
Um alle Einträge zu entfernen, weise einen leeren Stringarray zu:

Code: Alles auswählen

dim aLeer(0)
aLeer(0) = ""
oLstDock.stringitemlist=aLeer()
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Steffan
****
Beiträge: 125
Registriert: Mi, 21.06.2006 10:07
Wohnort: Dresden

Beitrag von Steffan »

Hallo Thomas,

vielen Dank für Deine Antwort. Ich hatte gestern abend die gleiche "Erleuchtung".
Man kann sogar noch eine Codezeile sparen.

Code: Alles auswählen

		dim tmp_arr()
		oLstDock.stringitemlist=tmp_arr()
Trotzdem vielen Dank für Deine Mühe und an dieser Stelle noch mal ein großes Lob für Deine unermüdliche Arbeit hier im Forum!

Steffan.
Antworten