Use TBrowseForFolder the right way

Update: Don’t ever use TBrowseForFolder! It looks bad and it is feature-poor. Use this: Delphi: Select Directory (TFileOpenDialog)

Wrong way: (If user clicks CANCEL, it still accepts the value)

var
  MyBrowse: TBrowseForFolder;
begin
  MyBrowse:=TBrowseForFolder.Create(nil);
  try
    MyBrowse.BrowseOptionsEx:=[bifeAllowMultiselect];
    MyBrowse.Caption:='Select folder:';
    MyBrowse.Folder:=lastfolder;
    if MyBrowse.Execute then
    begin
      if trim(MyBrowse.Folder)<>'' then
      begin
        lastfolder:=MyBrowse.Folder;
        ListBox1.Items.Add(MyBrowse.Folder);
      end;
    end;
  finally
    MyBrowse.Free;
  end;
end;

Correct way:

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyBrowse:=TBrowseForFolder.Create(nil);
  try
    MyBrowse.BrowseOptionsEx:=[bifeAllowMultiselect];
    MyBrowse.Caption:='Select folder:';
    MyBrowse.Folder:=lastfolder;
    MyBrowse.OnAccept:=BrowseForFolderOnAccept;
    MyBrowse.Execute;
  finally
    MyBrowse.Free;
  end;
end;

procedure TForm1.BrowseForFolderOnAccept(Sender: TObject);
begin
  if trim(MyBrowse.Folder)<>'' then
  begin
    lastfolder:=MyBrowse.Folder;
    ListBox1.Items.Add(MyBrowse.Folder); 
  end;
end;

Uses Vcl.StdActns

Leave a comment