Seite 1 von 1

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

Verfasst: Mo, 26.06.2006 15:36
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

Verfasst: Di, 27.06.2006 08:18
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

Verfasst: Di, 27.06.2006 12:19
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.