Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeView-Bug beim onEdited-Event? Daten sind durcheinander! (https://www.delphipraxis.net/146526-treeview-bug-beim-onedited-event-daten-sind-durcheinander.html)

TheMiller 21. Jan 2010 18:07


TreeView-Bug beim onEdited-Event? Daten sind durcheinander!
 
Hallo,

wieder einmal ein blöder Titel, aber ich hoffe ihr versteht später warum ich das nicht in einen "schönen" Titel fassen kann. Hier das Problem.

Ich lasse die TreeView auf das onEdited-Event reagieren, einen Datensatz in der DB neu schreiben (zu Testzwecken jetzt deaktiviert), danach die TreeView-Items löschen und die neuen Daten aus der DB anzeigen. Also, anzeigen, ändern, visuelle Ansicht löschen und neu aufbauen.

Es läuft auch alles so durch, wie eben beschrieben. Daten werden momentan keine verändert, da dies deaktiviert ist (wegen diesem Problem).

Nach dem leeren der Items (TreeView2.Items.Clear) und dem Neuladen der Daten aus der DB (es sind ja immernoch die gleichen), wird auf einmal einem Item (meistens dem zuletzt erstelltem) nicht mehr der Titel aus der DB gegeben, sondern der Wert, den "s" aus der Prozedur onEditet hatte.

Allerdings läd er erst alle Daten aus der DB richtig und zeigt sie auch richtig in der TreeView an, ändert aber nach dem ganzen Laden den Titel eines Items in den vorherigen "s-Wert".

[EDIT:] Quelltext entfernt, da es sich höchstwahrscheinlich um einen Bug handelt, oder ich erstelle die Items falsch ;) Ein Beispielsprojekt mit Quelltext liegt im Anhang des nächsten Beitrages bei [/EDIT]

Danke im Voraus

TheMiller 21. Jan 2010 19:19

Re: TreeView onEdited-Variable "s" verändert ungew
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ha....

es ist ein Delphi-Bug. Ich habe ein komplett neues "Programm" geschrieben, welches genauso arbeitet, wie mein richtiges - und der gleiche Fehler tritt auf.

Probiert es selbst aus!

Ändert einfach irgendein Item, indem ihr auf eins klickt und wartet, bis der Cursor erscheint. Tragt einen anderen Namen ein, bestätigt mit <Enter> und schaut euch dann das letzte Item an (unter Knoten: Item10).

Oder ist es doch mein Fehler? Wie auch immer, schaut es euch an!

TheMiller 22. Jan 2010 13:50

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Hallo,

ich pushe hier mal vorsichtig. Ich weis, dass noch keine 24h vergangen sind, aber heute ist Freitag und ich würde dieses Problem gerne abschließen können. Ich glaube nicht, dass andere noch Lust haben, nach 20 Uhr heute so viel zu "arbeiten".

Bitte reißt mir nicht gleich den Kopf ab.

Hier noch eine Info: Das Verhalten tritt auch in Windows XP auf. Mache ich doch etwas falsch?

Danke

Alaitoc 22. Jan 2010 14:10

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
[Edit] Klappt doch net so ganz...

Wobei ich mich frage ob das OnEdited-Event so das richtige ist :gruebel:

Zitat:

In der OnEdited-Ereignisbehandlungsroutine können Sie die Beschriftung noch ändern, bevor die Eingabe des Benutzers eingetragen wird.
Da er scheinbar nicht rechtzeitig die Änderungen übernehmen kann am Treeview.

Gibts da kein alternatives Event was wirklich nach den Änderungen gefeuert wird?

[Edit] Scheinbar gibt es soetwas nicht, da musst du dir wohl eine andere Strategie ausdenken.

MfG Alaitoc

TheMiller 22. Jan 2010 14:17

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

du hast das Problem anscheind falsch erkannt. Von einer AV spreche ich nicht. Aber mein beschriebener Fehler tritt auch bei deinem Code auf. Mach mal folgendes:

Öffne das Programm (mit deinem oder meinem Code - das ist egal)
Öffne mal einen Knoten und ändere den Namen von einem Child (Bsp. "Child3/2" -> "asdasdasda").
Der Baum läd sich neu
Und jetzt öffne mal ALLE Knoten und schau was passiert.

Ich hänge hier mal ein Bild an, wie mein Baum aussieht, nachdem ich "Child3/2" geändert hab.

[Roter Kasten]Hab roten Kasten gesehen, aber das Bild trotzdem angehängt. Tja, ich dachte es sei das richtige Event. So vom Wortlaut her...[/Roter Kasten]

Alaitoc 22. Jan 2010 14:21

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Ne scheinbar funktioniert es einfach nicht...also musst du dir nen alternativen Lösungsweg ausdenken.

Tut mir wirklich Leid...aber beschäftige mich allgemein dann doch eher weniger mit den visuellen Komponenten
und wenn laufe ich meist selbst oft vor eine Wand :wall:

Falls du einen Lösungsweg findest, poste ihn bitte :>

Habe nämlich noch eine Treeview-Komponente in einer Combobox, die irgendwann einmal weiter ausgebaut werden soll *g*

MfG Alaitoc

TheMiller 22. Jan 2010 14:51

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Klar gerne. Freut mich aber erstmal, dass es doch kein Fehler von mir ist. Stell dir mal ein größeres Projekt vor und die Arbeit diesen Fehler zu suchen und alles zu debuggen. Da gingen schon so 4 Stunden drauf... :wall:

busybyte 22. Jan 2010 16:51

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Doch ist ein Fehler in der Denkweise, da der Text im Treeview erst nach Austritt aus OnEditet mit dem Parameter/"Var"! S verändert wird, Du aber noch innerhalb der Procedure schon wieder neu lädst.

Delphi-Quellcode:
procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
  var S: string);
begin
LoadData;
S:=Node.Text; //<-
end;

TheMiller 22. Jan 2010 17:00

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Also gibt es keine Möglichkeit, so ein Verhalten zu erreichen, wie ich es gerne gehabt hätte. Ich könnte eine Message senden und darin den Baum neu laden lassen, oder?

RWarnecke 22. Jan 2010 17:04

Re: TreeView-Bug beim onEdited-Event? Daten sind durcheinand
 
Nachdem OnEdited-Event wird noch das OnChange-Event ausgeführt sofern deklariert. Setze mal Deine Load-Funktion in das OnChange-Event, dann sollte es funktionieren. Das On Edited-Event soll ja zum Beispiel dazu dienen, dass Du die Eingabe nochmals verarbeiten kannst oder zum Beispiel die Eingabe entsprechend formatieren kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr.
Seite 1 von 2  1 2      

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