Listbox Items löschen [Erledigt]
Moderator: Moderatoren
Listbox Items löschen [Erledigt]
Hallo zusammen
Ich stehe vor folgendem Problem. Ich möchte in meiner Listbox per Button Bestätigung ,einzelne Items aus meiner Listbox löschen .
Mit XbpListBox:delItem() kann man ja einzelene Items löschen z.b XbpListBox:delItem(3) würde immer die dritte Position löschen
Wie schaffe ich es dass es immer die aktuelle markierte Stelle löscht ? Ich klick auf das Item in der Listbox, es färbt sich blau, ich drücke auf den Button Löschen und das Item fliegt raus.
Viele Grüße Tim
Ich stehe vor folgendem Problem. Ich möchte in meiner Listbox per Button Bestätigung ,einzelne Items aus meiner Listbox löschen .
Mit XbpListBox:delItem() kann man ja einzelene Items löschen z.b XbpListBox:delItem(3) würde immer die dritte Position löschen
Wie schaffe ich es dass es immer die aktuelle markierte Stelle löscht ? Ich klick auf das Item in der Listbox, es färbt sich blau, ich drücke auf den Button Löschen und das Item fliegt raus.
Viele Grüße Tim
Zuletzt geändert von Timn97 am Di, 26. Jul 2022 15:34, insgesamt 1-mal geändert.
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Listbox Items löschen
Entweder reagierst du auf den MarkedItem Slot ... oder fragst die markierten Items ab:
beachte dass du immer ein array zurück bekommst, das die Nummern der Markierten Elemente enthält, beim Löschen mit dem höchsten Element anfangen
Code: Alles auswählen
Returns the selected items in the list box.
:getData() --> aItemPos
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Listbox Items löschen
wenn du eine Event Loop hast würde ich es so einbauen
Code: Alles auswählen
nEvent := 0
DO WHILE .NOT. lExit
nEvent := APPEVENT( @mp1, @mp2, @oXbp )
DO CASE
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_DEL
oListbox:delItem( oListbox:GetData()[1] )
gruss by OHR
Jimmy
Jimmy
Re: Listbox Items löschen
Ich habe verstanden was Sie meinen aber bei mir ist das Array immer leer...brandelh hat geschrieben: ↑Fr, 05. Okt 2018 9:28 Entweder reagierst du auf den MarkedItem Slot ... oder fragst die markierten Items ab:
beachte dass du immer ein array zurück bekommst, das die Nummern der Markierten Elemente enthält, beim Löschen mit dem höchsten Element anfangenCode: Alles auswählen
Returns the selected items in the list box. :getData() --> aItemPos
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Listbox Items löschen
wir duzen uns hier ohne das böse zu meinen
Wenn das Array leer ist, wurde keine Zeile ausgewählt (angeklickt) ...
Wenn das Array leer ist, wurde keine Zeile ausgewählt (angeklickt) ...
Gruß
Hubert
Hubert
Re: Listbox Items löschen
Habe jetzt was im Array drin stehen aber delItem hat eine falschen Parameter kann ich nicht oListbox1:delItem(aItemPos[1]) aItem enspricht dem Array und es hat nur einen Wert drin weil ich nur einen anklicke
ERROR:
oError:args :
-> VALTYPE: O CLASS: XbpListBox
-> VALTYPE: A VALUE: {1}
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : :delItem
oError:osCode : 0
oError:severity : 2
oError:subCode : 1025
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
ERROR:
oError:args :
-> VALTYPE: O CLASS: XbpListBox
-> VALTYPE: A VALUE: {1}
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : :delItem
oError:osCode : 0
oError:severity : 2
oError:subCode : 1025
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
Re: Listbox Items löschen
Habs herrausgefunden:) habe mir eine löschen Methode geschrieben und die beim Button die aufgerufen und das Funktioniert so
Code: Alles auswählen
PROCEDURE Loeschen()
LOCAL aArrayy:= oListbox1:getData()
LOCAL x:= 0
DO WHILE ++x <= LEN(aArrayy)
oListbox1:delItem(aArrayy[x])
ENDDO
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Listbox Items löschen
Deine PROZEDUR greift direkt auf die Variable der Listbox zu, damit das funktioniert, muss diese Public, Private oder static sein,
besser wäre es diese als Parameter zu übergeben ...
Problematisch könnte dieser Ansatz werden, wenn mehrere markiert werden können und man einen Eintrag zwischen drin löscht ...
besser wäre es diese als Parameter zu übergeben ...
Code: Alles auswählen
PROCEDURE ListBoxEintragLoeschen(oObj)
LOCAL aArrayy:= oObj:getData()
LOCAL x:= 0
DO WHILE ++x <= LEN(aArrayy)
oObj:delItem(aArrayy[x])
ENDDO
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Listbox Items löschen
hi,
damit liefert o:GetData() ein Array mit den Nummer die durch einen Balken markiert sind.
Default ist o:markMode := XBPLISTBOX_MM_SINGLE d.h. man kann nur 1 Item selektieren, das wo man mit dem Balken drauf steht. wenn man mehrere markieren will muss man XBPLISTBOX_MM_MULTIPLE verwenden.
---
du hast es jetzt zwar über einen Button gelöst aber deine Frage zuerst war ja Keyboard.damit löscht man per Keyboard das Item wo man gerade steht.
! Note : danach verschwindet der Balken. mit dem Cursor/Maus kann man aber den nächsten wählen
um das ganz aufzulösen kann man es auch so schreiben
selbstverständlich kannst man Do_loesch() auch per Button aktivieren
ein Eintrag in einer Listbox ist selectiert wenn du einen Balken in der Listbox hast.
damit liefert o:GetData() ein Array mit den Nummer die durch einen Balken markiert sind.
Default ist o:markMode := XBPLISTBOX_MM_SINGLE d.h. man kann nur 1 Item selektieren, das wo man mit dem Balken drauf steht. wenn man mehrere markieren will muss man XBPLISTBOX_MM_MULTIPLE verwenden.
---
du hast es jetzt zwar über einen Button gelöst aber deine Frage zuerst war ja Keyboard.
Code: Alles auswählen
oListbox:Keyboard := {| nKeyCode, uNIL, self | IF( nKeyCode = xbeK_DEL,;
IF(.NOT. EMPTY(oListbox:GetData()),;
oListbox:delItem( oListbox:GetData()[1] ),NIL),NIL) }
! Note : danach verschwindet der Balken. mit dem Cursor/Maus kann man aber den nächsten wählen
um das ganz aufzulösen kann man es auch so schreiben
Code: Alles auswählen
oListbox:Keyboard := {| nKeyCode, uNIL, self | IF( nKeyCode = xbeK_DEL, Do_loesch(oListbox), NIL )
PROCEDURE Do_loesch(oListbox)
LOCAL aData := oListbox:GetData()
LOCAL i,iMax,nNum
IF .NOT. EMPTY(aData)
iMax := LEN(aData) // für mehrer ausgelegt
// bei der gössten Nummer anfangen
ASORT(aData)
FOR i := iMax TO 1 STEP -1
nNum := aData[i]
oListbox:delItem(nNum)
NEXT
ENDIF
// hier den Balken neu positionieren
IF nNum-1 > 0
oListbox:SetData({nNum-1})
ELSE
oListbox:SetData({1})
ENDIF
RETURN
gruss by OHR
Jimmy
Jimmy