2017-01-13 5 views
-1

Im работает над проектом в Delphi, у меня есть TShellListView компонент (List), и кнопка для создания новой папки:TShellListView создать новую папку и переименовать его

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

Но что мне нужно, это когда пользователь создать новая папка, затем папка автоматически отображается в режиме редактирования, поэтому он может изменить имя папки, как при создании новой папки в Windows.

Как я могу это сделать?

ответ

1

попробовать что-то вроде этого:

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; 

В качестве альтернативы:

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

У меня есть тип ошибки 'String' и' Integer' on line, 'Item: = List.FindCaption ('New Folder');' Вы пропустите целочисленный параметр для 'FindCaption' – Sami

+0

Должно быть:' FindCaption (Integer, 'New Folder', boolean, boolean, boolean); ', вы передаете только строковый параметр. – Sami

+0

Я исправил его –

0

Я нашел решение:

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

Почему вы используете '' List.ItemIndex' и List.SelectedFolder '? Вы должны иметь возможность прокручивать «List.Items []» без изменения текущего выбора. –

 Смежные вопросы

  • Нет связанных вопросов^_^