Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Doppelte Einträge in einem Treeview verhindern

  Alt 10. Jun 2009, 20:06
Also bei idYes soll der Name gesetzt werden, der vorm umbenennen war?
Delphi-Quellcode:
     
idYes: S := Node.Text; // Setzt wieder alten Wert vorm umbenennen
idNo: S := S + ' [new]';
Node.Text hält noch den alten Namen, der Node steht ja erst kurz davor unbenannt zu werden...

btw: statt [new] würde sich [1]..[n] anbieten


Vielleicht kannst Du was mit anfangen, ansonsten einfach ignorieren
(der Teil für einen Zweig ist alleine ja recht übersichtlich)
Delphi-Quellcode:
function GetUniqueNodeText(aTreeView: TTreeView; aParentNode: TTreeNode;
                           aNodeText : String; OnlyInTwig : Boolean = True): String;
var
  i : Integer;
  sl : TStringList;
begin
  Result := aNodeText;

  {<--- Prüft nur einen Zweig bzw. erste Ebene --->}
  if OnlyInTwig then begin

    i := 0;
    while NodeTextExistsInTwig(aTreeView, aParentNode, Result) do begin
      inc(i);
      Result := aNodeText+'['+IntToStr(i)+']';
    end;

  {<--- Prüft alle Nodes --->}
  end else begin

    sl := TStringList.Create;
    try
      // Namen sammeln, damit Items nicht x-mal durchlaufen werden muss
      // Aufwand relativiert sich bei großen Bäumen
      for i := 0 to aTreeView.Items.Count-1 do
        if Pos(AnsiUpperCase(aNodeText), AnsiUpperCase(aTreeView.Items[i].text)) > 0 then
          sl.Add(AnsiUpperCase(aTreeView.Items[i].text));

      // Prüfen und gg. erweitern
      i := 0;
      while sl.IndexOf(AnsiUpperCase(Result)) >= 0 do begin
        inc(i);
        Result := aNodeText+'['+IntToStr(i)+']';
      end;

    finally
      sl.Free;
    end;

  end;
end;
  Mit Zitat antworten Zitat