2017-01-13 5 views
-1

Im auf einem Projekt in Delphi arbeitet, habe ich TShellListView Komponente (List), und Button Neue Ordner zu erstellen:TShellListView neue Ordner erstellen und benennen Sie es

MkDir(List.RootFolder.PathName+'\New Folder'); 
List.Update; 

Aber was ich brauche, ist, wenn der Benutzer erstellen die neuer Ordner, dann wird der Ordner automatisch im Bearbeitungsmodus angezeigt, damit er den Ordnernamen ändern kann, als wenn Sie in Windows Neuer Ordner erstellen.

Wie kann ich das tun?

Antwort

1

versuchen, etwas wie folgt aus:

var 
    Path, PathName: string; 
    Folder: TShellFolder; 
    I: Integer; 
begin 
    Path := IncludeTrailingPathDelimiter(List.RootFolder.PathName) + 'New Folder'; 
    if not CreateDir(Path) then Exit; 
    List.Refresh; 
    for I := 0 to List.Items.Count-1 do 
    begin 
    Folder := List.Folders[I]; 
    if (Folder <> nil) and (Folder.PathName = Path) then 
    begin 
     List.Items[I].EditCaption; 
     Exit; 
    end; 
    end; 
end; 

Alternativ:

var 
    Path: string; 
    Item: TListItem; 
begin 
    Path := IncludeTrailingPathDelimiter(List.RootFolder.PathName) + 'New Folder'; 
    if not CreateDir(Path) then Exit; 
    List.Refresh; 
    Item := List.FindCaption(0, 'New Folder', False, True, False); 
    if Item <> nil then 
    Item.EditCaption; 
end; 
+0

Ich habe einen Fehlertyp 'String' und' Integer' in Zeile, 'Item: = List.FindCaption ('Neuer Ordner');' Sie vermissen den Integer-Parameter für 'FindCaption' – Sami

+0

Sollen sein wie:' FindCaption (Integer, 'New Folder', boolean, boolean, boolean); ', übergeben Sie nur den String-Parameter. – Sami

+0

Ich habe es behoben –

0

fand ich eine Lösung:

MkDir(List.RootFolder.PathName+'\New Folder'); 
List.Update; 
List.ItemIndex:=0; 
List.HideSelection:=True; 
while List.ItemIndex<List.Items.Count-1 do 
begin 
    // Find the New Folder 
    if List.SelectedFolder.PathName=(List.RootFolder.PathName+ '\New Folder') then 
    begin 
    //Set the Folder in Edit mode & exit the loop 
    List.Items[List.ItemIndex].EditCaption; 
    Exit; 
    end 
    else 
    //Inc the Index 
    List.ItemIndex := List.ItemIndex+1; 
end; 
List.HideSelection:=False; 
+0

Warum Sie verwenden '' List.ItemIndex' und List.SelectedFolder '? Sie sollten in der Lage sein, 'List.Items []' durchzulaufen, ohne die aktuelle Auswahl zu ändern. –

Verwandte Themen