Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Treevieweintrag nicht löschen (https://www.delphipraxis.net/44474-treevieweintrag-nicht-loeschen.html)

Masterof 19. Apr 2005 21:55


Treevieweintrag nicht löschen
 
Hallo!!

Ich habe ein eigenartiges Problem, wenn ich in einem Treeview einen Eintrag markierte und anschließend lösche funktioniert das ohne Probleme.
Mein Problem ist es, dass ich kann ohne zu markieren Einträge löschen kann, wie kann ich das verhindern?

MfG Master

alcaeus 19. Apr 2005 21:58

Re: Treevieweintrag nicht löschen
 
:gruebel:

Ohne zu markieren loeschen?
Du koenntest im OnMouseUp der TreeView ueberpruefen, ob ein Node an der entsprechenden Stelle ist:
Delphi-Quellcode:
if TreeView1.GetNodeAt(X, Y) = nil then
In diesem Fall zeig einfach kein Popupmenu an. So wie ich das mitgekriegt habe, loescht die TreeView beim Klick auf einen leeren Bereich nicht die aktuelle Markierung.

Greetz
alcaeus

Masterof 19. Apr 2005 22:02

Re: Treevieweintrag nicht löschen
 
Hallo!!

nein, wenn kein Eintrag markiert ist löscht er willkürlich einen, ohne eine Auswahl zu treffen.
z.B klicke ich in ein Memo und anschließend wieder auf den löschen Button, es ist zwar nichts markiert, aber er löscht trotzdem einen Eintrag

Master

alcaeus 19. Apr 2005 22:05

Re: Treevieweintrag nicht löschen
 
Zitat:

Zitat von Masterof
nein, wenn kein Eintrag markiert ist löscht er willkürlich einen, ohne eine Auswahl zu treffen.
z.B klicke ich in ein Memo und anschließend wieder auf den löschen Button, es ist zwar nichts markiert, aber er löscht trotzdem einen Eintrag

Doch, es ist einer markiert: den den du als letztes markiert hattest. Da das TreeView aber nicht den Focus hat, sieht man es nicht. Ich weiss im Moment nicht wie man das Verhalten umgehn koennte, die ActiveComponent-property des Forms auszulesen bringt auch nichts, denn sobald man auf den Button klickt, ist der Button die aktive Kompo :gruebel:
Finde aber mal raus, ob meine Vermutung mit dem zuletzt markierten Knoten stimmt.

Und zur Not koenntest du immer noch eine Sicherheitsabfrage einbauen...

Greetz
alcaeus

Masterof 19. Apr 2005 22:10

Re: Treevieweintrag nicht löschen
 
Hallo!!

ja du hast recht, es wir der nächste übergeordnete Knoten gelöscht. Ich habe schon versucht zu prüfen ob ein Eintrag ausgewählt ist mit der Eigenschaft Selected, aber das wird in der If Abfrage nicht akzeptiert.
Ja das mit der Abfrage könnte ich machen, aber es das ist nicht die beste Lösung. :coder2: :?:
MfG Master

Lannes 20. Apr 2005 09:10

Re: Treevieweintrag nicht löschen
 
Hallo,

Zitat:

Zitat von Masterof
... z.B klicke ich in ein Memo und anschließend wieder auf den löschen Button, es ist zwar nichts markiert, aber er löscht trotzdem einen Eintrag ...

Damit man sehen kann welcher Knoten markiert ist, auch wenn TreeView nicht den Focus hat, muss die Eigenschaft HideSelection der TreeView im OI auf False gesetzt werden.

Zitat:

Zitat von Masterof
ja du hast recht, es wir der nächste übergeordnete Knoten gelöscht. Ich habe schon versucht zu prüfen ob ein Eintrag ausgewählt ist mit der Eigenschaft Selected, aber das wird in der If Abfrage nicht akzeptiert.
Ja das mit der Abfrage könnte ich machen, aber es das ist nicht die beste Lösung. :coder2: :?:
MfG Master

Die Eigenschaft Selected kannst Du so abfragen:
Delphi-Quellcode:
if TreeView1.Selected <> nil then
  showmessage('Ein Eintrag ist im TreeView selectiert');
Wenn ich es richtig verstanden habe, dann soll erst dann ein Knoten gelöscht werden können, wenn der Anwender selectiert hat.
So geht es:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if TreeView1.Selected <> nil then
    begin
    TreeView1.Items.Delete(TreeView1.Selected);
    Button1.Enabled := False;
    end;
end;

procedure TForm1.TreeView1Enter(Sender: TObject);
begin
  if TreeView1.Items.Count > 0 then//Zugriffsfehler vermeiden
    Button1.Enabled := True;
end;

procedure TForm1.TreeView1Exit(Sender: TObject);
begin
  Button1.Enabled := False;
end;

Waldteufel 20. Apr 2005 09:13

Re: Treevieweintrag nicht löschen
 
Hi.

@lannes: OnExit wird doch aufgerufen, sobald ein anderes Control den Fokus erhält. Und das ist der Fall, wenn man auf den Button klickt, also wird in dem Moment in dem du klickst der Button deaktiviert :arrow: nix passiert ;-)

Lannes 20. Apr 2005 09:29

Re: Treevieweintrag nicht löschen
 
Hallo,
Zitat:

Zitat von Waldteufel
Hi.

@lannes: OnExit wird doch aufgerufen, sobald ein anderes Control den Fokus erhält. Und das ist der Fall, wenn man auf den Button klickt, also wird in dem Moment in dem du klickst der Button deaktiviert :arrow: nix passiert ;-)

Hast Du das getestet :gruebel: , glaub ich Dir nicht :mrgreen:
Der Schalter wird zwar zuerst deaktiviert, danach wird aber OnClick aufgerufen. :thumb:

alcaeus 20. Apr 2005 09:30

Re: Treevieweintrag nicht löschen
 
Zitat:

Zitat von Lannes
Die Eigenschaft Selected kannst Du so abfragen:
Delphi-Quellcode:
if TreeView1.Selected <> nil then
  showmessage('Ein Eintrag ist im TreeView selectiert');

*ggg* ich habs soeben probiert, aber wie bereits gesagt, nichtmal ein Klick in einen leeren Bereich der Treeview loescht die Markierung. Wie es ist, nil zuzuweisen habe ich jetzt nicht versucht, aber dann wuerde sich ja auch die Frage stellen, wann man selected auf nil setzen soll ;)

Zitat:

Zitat von Waldteufel
@lannes: OnExit wird doch aufgerufen, sobald ein anderes Control den Fokus erhält. Und das ist der Fall, wenn man auf den Button klickt, also wird in dem Moment in dem du klickst der Button deaktiviert :arrow: nix passiert ;-)

hmm...dann kann man eben nur einmal einen Knoten loeschen, aber ich sehe keinen Hinweis auf OnExit :gruebel:

Greetz
alcaeus

Masterof 20. Apr 2005 12:06

Re: Treevieweintrag nicht löschen
 
Hallo!!

Leider ist das ekine Lösung des Problems. Also schein das ganze ein Fehler im Delphi zu sein?!
ICh hoffe es kenne jemand eine Lösung, denn ich habe keine Ahnung wie ich das Problem lösen soll.

MfG Master


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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