xsharp.eu • ListView2:AddItem zerstört ListView1:GetSelectedItem()
Page 1 of 1

ListView2:AddItem zerstört ListView1:GetSelectedItem()

Posted: Thu Feb 09, 2023 1:22 pm
by lagraf
Ich habe eine kleine Testoberfläche für ein Gastroprogramm, um einem Interessenten zu zeigen, wie sowas aussehen könnte. Darin werden Getränke auf Tische boniert. Man soll auch Getränke von einem Tisch auf einen anderen Tisch umlagern können (wie in der VO IDE unter Properties -> Libraries).
Dies geschieht mit 2 ListViews:

Methode lvwAddPos2 fügt das in lvwData1 selektierte Getränk in den lvwData2 ein
Methode lvwDelPos1 sollte dieses Getränk dann aus lvwData1 löschen

Allerdings bringt durch das Einfügen lvwData2:AddItem(...) die nächste Abfrage lvwData1:GetSelectedItem(), welche fürs Ermitteln des zu löschenden Items erforderlich ist, einen BoundError! Es sieht so aus als ob lvwData2:AddItem(...) den lvwData1:GetSelectedItem() irgendwie beeinflußt, obwohl es 2 von einander unabhänge ListViews sind.

Ich habe die AEF angehängt sowie den Unterordner BMP mit den Icons, zur Bedienung:
- Bonierung mehrerer Getränken über die Buttons auf den vorgeschlagenen Tisch1
- Öffnen des Splitfensters über den Button Tisch splitten
- Mit Button > das markierte Getränk in den rechten ListView verschieben -> BoundError

In der Methode dlgSplitten:LvwAddPos2() ist die verursachende Stelle markiert. Ich habe inzwischen 2 Tage damit verbracht, herauszufinden, warum sich die beiden ListViews gegenseitig beeinflußen und beim lvwData1:GetSelectedItem den Bound Error bringen, finde aber keinen Fehler im Programm. Vielleicht hat jemand mal Zeit und Lust einen Blick hineinzuwerfen. Wäre jedenfalls hilfreich, ansonsten müßte ich das Programm auf 2 ArrayServer umschreiben.

Danke!
TestGastro.zip
(72.8 KiB) Downloaded 98 times
BMP.zip
(32.29 KiB) Downloaded 116 times

ListView2:AddItem zerstört ListView1:GetSelectedItem()

Posted: Sat Feb 11, 2023 12:46 pm
by g.bunzel@domonet.de
Servus,

...ich kann das Programm nicht starten, da die Klasse 'MultiHoverButton' fehlt und ich verwende auch niemals ListViews.
Wenn ich mir die Erstellung der ListViews ansehe, werden für beide ListViews die gleichen Spaltenobjekte verwendet.

METHOD PostInit() CLASS dlgSplitten
LOCAL oCol AS ListViewColumn

// Listview definieren
oCol := ListViewColumn{5, #MENGE}
oCol:Caption := "Mng"
oCol:Alignment := LVCFMT_RIGHT
SELF:oDClvwData1:AddColumn(oCol)
SELF:oDClvwData2:AddColumn(oCol)

Das müssen wohl eigene Spaltenobjekte für jedes ListView sein.

HTH

Gerhard

ListView2:AddItem zerstört ListView1:GetSelectedItem()

Posted: Sun Feb 12, 2023 8:03 am
by lagraf
Hallo Gerhard,
genau das war das Problem, jetzt funktionierts! Da habe ich ein wenig zu viel gespart. Hab nicht daran gedacht, dass sich die Spalten dann stören. Inzwischen habe ich die Variante mit dem ArrayServer und DataListViews auch fertig.
Vielen Dank, Franz