2017-01-13 1 views
-1

Im travaillant sur un projet Delphi, je composante TShellListView (liste), et le bouton pour créer un nouveau dossier:TShellListView créer un nouveau dossier et le renommer

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

Mais ce que j'ai besoin est lorsque l'utilisateur crée la nouveau dossier, puis le dossier affiche automatiquement en mode édition, de sorte qu'il peut changer le nom du dossier, comme lorsque vous créez un nouveau dossier dans Windows.

Comment puis-je faire cela?

Répondre

1

Essayez quelque chose comme ceci:

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; 

Autre possibilité:

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

J'ai un type d'erreur 'String' et' Integer' en ligne, 'Item: = List.FindCaption ('Nouveau dossier');' Vous manquez le paramètre entier pour 'FindCaption' – Sami

+0

Devrait être comme:' FindCaption (Integer, 'Nouveau dossier', booléen, booléen, booléen); ', vous passez juste la chaîne de param. – Sami

+0

Je l'ai corrigé –

0

J'ai trouvé une solution:

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

Pourquoi utilisez-vous '' List.ItemIndex' et List.SelectedFolder '? Vous devriez être capable de parcourir 'List.Items []' sans changer la sélection actuelle. –