Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Nachricht NACH dem Löschen eines ListView.Item erhalten? (https://www.delphipraxis.net/169696-nachricht-nach-dem-loeschen-eines-listview-item-erhalten.html)

Bummi 6. Aug 2012 07:48

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Ich hatte meinen Beitrag 2 mal geändert, in der letzen Version gibt es ein OnItemDeleted-Event, hier kannst Du über Sender gehen ....

PeterPanino 6. Aug 2012 08:09

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von Bummi (Beitrag 1177024)
Ich hatte meinen Beitrag 2 mal geändert, in der letzen Version gibt es ein OnItemDeleted-Event, hier kannst Du über Sender gehen ....

Ja, du hast Recht, vielen Dank!

PeterPanino 6. Aug 2012 09:22

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von Furtbichler (Beitrag 1177021)
Wie kann ein Anwender Einträge aus einer ListView löschen? Welche Tasten muss man da drücken?

Zitat:

Zitat von Bummi (Beitrag 1176996)
Delphi-Quellcode:
ListView1.Items.Delete(0);

Oder in von ListView abgeleiteten Klassen könnte es andere Möglichkeiten geben, ein Item zu löschen.

TiGü 6. Aug 2012 09:39

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von PeterPanino (Beitrag 1177032)
Zitat:

Zitat von Furtbichler (Beitrag 1177021)
Wie kann ein Anwender Einträge aus einer ListView löschen? Welche Tasten muss man da drücken?

Zitat:

Zitat von Bummi (Beitrag 1176996)
Delphi-Quellcode:
ListView1.Items.Delete(0);

Oder in von ListView abgeleiteten Klassen könnte es andere Möglichkeiten geben, ein Item zu löschen.

Anwender <> Programmierer!

PeterPanino 6. Aug 2012 11:01

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von TiGü (Beitrag 1177035)
Anwender <> Programmierer!

Korrektur: Oder in von ListView abgeleiteten Klassen könnte es für den Programmierer andere Möglichkeiten geben, dem Anwender die Löschung eines Items zu ermöglichen.

jaenicke 6. Aug 2012 12:34

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von PeterPanino (Beitrag 1177073)
Korrektur: Oder in von ListView abgeleiteten Klassen könnte es für den Programmierer andere Möglichkeiten geben, dem Anwender die Löschung eines Items zu ermöglichen.

Sicher, aber das ist genau der Punkt:
Der Befehl kommt aus der Anwendung. Dort wird ja explizit das Löschen aufgerufen.

Deshalb wird dafür eigentlich gar kein Event benötigt, da Events nur gebraucht werden, wenn der Programmierer etwas mitbekommen muss, von dem er sonst nicht mitbekommen würde, dass es passiert. Da die Aktion hier selbst per Quelltext gestartet wird, weiß man das aber schon.

Deshalb ist die Logik schon etwas seltsam, aber letztlich schadet ein solches Event auch nicht. Es ist nur rein logisch überflüssig.

Damit ist die Lösung, die du jetzt benutzt, schon ok, wenn auch nicht optimal.

PeterPanino 6. Aug 2012 12:52

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von jaenicke (Beitrag 1177082)
Sicher, aber das ist genau der Punkt:
Der Befehl kommt aus der Anwendung. Dort wird ja explizit das Löschen aufgerufen.

Deshalb wird dafür eigentlich gar kein Event benötigt, da Events nur gebraucht werden, wenn der Programmierer etwas mitbekommen muss, von dem er sonst nicht mitbekommen würde, dass es passiert. Da die Aktion hier selbst per Quelltext gestartet wird, weiß man das aber schon.

Deshalb ist die Logik schon etwas seltsam, aber letztlich schadet ein solches Event auch nicht. Es ist nur rein logisch überflüssig.

Damit ist die Lösung, die du jetzt benutzt, schon ok, wenn auch nicht optimal.

Wenn der Anwender etwas will, dann heißt das nicht, dass das Programm das auch tut. Deshalb ist es bei einer "Vorhersage" gut möglich, dass die Anzeige vorschnell eine falsche Änderung anzeigt, diese aber aus irgendeinem Grund nicht durchgeführt werden konnte. Das kann dann zu einem Programm-, Anwendungs- oder Daten-Fehler führen. Auch ist denkbar, dass neben dem Anwender und dem Programm eine dritte Ebene (z.B. das Dateisystem oder eine Datenbank) beteiligt ist, welche wiederum in die Ausführung eingreifen kann. Aus all diesen Gründen ist es im allgemeinenn ratsam, nur mit Tatsachen zu arbeiten. Etwa bei dem Listview-Beispiel abzuwarten, bis Items.Count wirklich um die Zahl der gelöschten Items vermindert wurde. Alles andere ist unsauberer Programmierstil. Aus diesem Grund gibt es bei Datenbanken auch das Transaktions-Prinzip, um Inkonsistenzen zwischen verschiedenen Bereichen (etwa Client und Server) zu verhindern.

jaenicke 6. Aug 2012 13:46

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Darum geht es ja gerade gar nicht. Der Punkt ist, dass der Quelltext so aussieht:
Delphi-Quellcode:
procedure A;
begin
  xy.DeleteItem;
end;

procedure OnDeleted;
begin
  ShowMessage('Ha, gelöscht');
end;
Statt ganz einfach und simpel:
Delphi-Quellcode:
procedure DeleteMyItem;
begin
  xy.DeleteItem;
  ShowMessage('Ha, gelöscht');
end;
Aber wenn es dir so lieber ist, ist das ja deine Sache. Genauso die Wahl der Komponente an sich. :wink:

PeterPanino 6. Aug 2012 13:55

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von jaenicke (Beitrag 1177093)
Der Punkt ist, dass der Quelltext so aussieht:

Bei mir sieht der Quelltext ganz anders aus ... ;-)

Und ich verwende ja in meinem Code auch nicht TListView, sondern eine davon abgeleitete Klasse. Dass wir hier bei der Diskussion TListView nennen, ist ja nur eine Abstraktion.

Iwo Asnet 6. Aug 2012 16:08

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
 
Zitat:

Zitat von PeterPanino (Beitrag 1177085)
Aus all diesen Gründen ist es im allgemeinenn ratsam, ... bei dem Listview-Beispiel abzuwarten, bis Items.Count wirklich um die Zahl der gelöschten Items vermindert wurde. Alles andere ist unsauberer Programmierstil. Aus diesem Grund gibt es bei Datenbanken auch das Transaktions-Prinzip, um Inkonsistenzen zwischen verschiedenen Bereichen (etwa Client und Server) zu verhindern.

Du wirst zwar etwas durcheinander, aber letztendlich hältst Du Deine Vorgehensweise für guten Programmierstil. Ich nicht, und zwar aus folgendem Grund:

Der ListView-Container ist eine Abbildung/Darstellung einer Liste. Du führst die Löschoperationen jedoch auf der Liste durch, und nicht auf der ListView selbst. Ich würde also der Liste (also der Datenstruktur) das Event "OnDeleted" bzw. "OnItemCountChanged" spendieren bzw. dort ansetzen.

Grundsätzlich ist deine Vorgehensweise aber ok, denn in deiner Sichtweise wird die ListView verändert und soll immer und überall eine verbindliche und korrekte Aussage über die in ihr gespeicherten Daten geben können (hier: Anzahl), und zwar irgendwann auch, wenn die Löschoperation abgeschlossen ist. Derart (korrekt) mitteilsam ist die LV leider nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz