Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: FMX: Seltsames Verhalten beim Entfernen von ListboxItems

  Alt 6. Jan 2017, 23:46
Hmm..

Kenne zwar nur VCL, aber, Du machst IM BtnClick ein Free des Buttons selber, somit können events, welche NACH dem BtnCLick noch kommen könnten gegen einem nicht mehr vorhandenen Button laufen.

Unter VCL würde ich im BtnClick NUR ein PostMessage absetzen mit dem Index des Eintrages und dann in der Behandlungsroutine den ListBoxEntry löschen.
So ist sichergestellt, dass alle noch zum BtnClick gehöhrenden Events abgearbeitet sind, bevor der Btn selber gelöscht wird.
Ja, genau das ist der Grund, das aufrufende Objekt wird zerstört, bevor das Event, das es ausgelöst hat, abgearbeitet wurde.

Die hier beschriebene Lösungs-Variante mit Postmessage ginge natürlich nur unter Windows. Es ginge aber das allgemeine Messaging (TmessageManager) oder man macht es z.B. so:

Delphi-Quellcode:
procedure TForm46.DelBtnClick(Sender: TObject);
var
  lbi: TListBoxItem;
begin
  if TFmxObject(Sender).Parent is TListBoxItem then
  begin
    lbi := TListBoxItem(TFmxObject(Sender).Parent);
    lbi.IsSelected := True;

    TTask.run (procedure
    begin
      TThread.Synchronize(NIL, procedure
        begin
          lbi.free;
          ListBox1.ItemIndex := -1;
      end);
    end);
  end;
end;
TTask.Run wird erst nach Beendigung des Klick-Events ausgeführt, dann kann man gefahrlos das Objekt zerstören.

Geändert von Harry Stahl ( 7. Jan 2017 um 14:01 Uhr)
  Mit Zitat antworten Zitat