AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Doppelte Einträge in einem Treeview verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Einträge in einem Treeview verhindern

Ein Thema von RWarnecke · begonnen am 10. Jun 2009 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Doppelte Einträge in einem Treeview verhindern

  Alt 11. Jun 2009, 12:20
Hallo DeddyH,

stimmt.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#12

Re: Doppelte Einträge in einem Treeview verhindern

  Alt 11. Jun 2009, 14:48
Hallo,


mit dem Problem hab ich auch schon mal gekämpft.

Zitat von Satty67:
...
Denke beim Ereignis Edited ist der Node noch in der Methode zum ändern des Nodes, weshalb aus dem Ereignis heraus ein erneuter Aufruf scheitert?

€: Vielleicht TVN_BEGINLABELEDIT mit Post-Message bei idYes an den TreeView abschicken, hängt sich ja dann an und ruft den Edit-Modus gleich wieder auf? ...
das ist genau das Problem und der richtige Ansatz.

In OnEdit prüfen ob der Nodetext schon vorhanden ist, wenn ja mit Postmessage eine selbst definierte Message abschicken.
Dadurch kommst Du raus aus dem Ereignis, in dem die Aktivierung des Edit-Modus scheitert.
In der Procedur dann die Problembehandlung durchführen.
Hab Dir eine Beispiel-Unit zusammengestellt:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    procedure TreeView1Edited(Sender: TObject; Node: TTreeNode;
      var S: String);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    FDupeNodeText : String;
    function TreeNodeSearch(aNode: TTreeNode; SearchItem: string): TTreeNode;
    procedure PM_TVNodeTextAlreadyExists(var Msg: TMessage); message WM_USER +1001;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
function TForm1.TreeNodeSearch(aNode: TTreeNode; SearchItem: string): TTreeNode;
var
  I: Integer;
begin
  result := nil;
  if (aNode = nil) or (SearchItem = '') then Exit;
  for I := 0 to aNode.Count - 1 do
  begin
    if SearchItem = aNode.Item[i].Text then
    begin
      Result := aNode.Item[i];
      exit;
    end;
  end;
end;

procedure TForm1.PM_TVNodeTextAlreadyExists(var Msg: TMessage);
begin
  case MessageBox(0, 'Sie haben einen doppelten Eintrag erstellt. Ändern ?',
                     'Doppelter Eintrag', MB_ICONQUESTION or MB_YESNO) of
      idYes: TTreeNode( Msg.WParam ).EditText;
      idNo: TTreeNode( Msg.WParam ).Text := FDupeNodeText + ' [new]';
    end;
end;


procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
  var S: String);
begin
  if TreeNodeSearch(Node.Parent, S) <> nil then
    begin
    // neue Caption speichern
    FDupeNodeText := S;
    // zurücksetzen
    S := Node.Text;
    // nach dem Ereignis Problem behandeln
    PostMessage(Handle, WM_USER +1001, integer(Node), 0);
    end;
end;

end.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#13

Re: Doppelte Einträge in einem Treeview verhindern

  Alt 11. Jun 2009, 15:42
Hallo Lannes,

ich habe mal Dein Beispiel ausprobiert und es funktioniert wunderbar. Genau so habe ich es mir vorgestellt. Danke Dir nochmals. Ich werde mir das Beispiel jetzt näher zur Gemüte führen und es in mein bestehendes Programm einbauen.

Danke auch nochmal an die anderen Helfer.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
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