I have shared a folder picker in the past based on LFSO. Here I will share an RA based folder browser/picker.
In your VB project, add an new Dialog item (I named mine PFTBrowser). Add a Panel (its name does not matter) to the Dialog form and set it to cover most of the form. Now place a TreeView object anywhere inside the panel and name it tvFolderTree.
Here is the code for the PFTBrowse Dialog form:
'*********************************************************** '*********************************************************** '** PFTBrowser by Bert Warren ** '** Copyright © Paper Free Technology 2008 ** '** Laserfiche Folder Browser ** '*********************************************************** '*********************************************************** ' PFTBrowser ' This Dialog Window is made up of a panel and treeview for ' displaying the LF Folder structure, and a TableLayoutPanel ' with the OK & Cancel buttons. ' To use this item, instantiate using the keyword New and ' provide valid LF server, repository, windows authentication, ' user name, and password. This will cause it to create the ' form and log into the repository. Then when the form is ' closed, it will log out. ' Usage ' Dim myBrowser As New PFTBrowser(sLFServerName, sLFRepositoryName, bLFWinAuth, sLFUserName, sLFPassword) ' 'Open/Show new PFTBrowser Dialog ' myBrowser.ShowDialog() ' ' Check dialog result ' If myBrowser.DialogResult = Windows.Forms.DialogResult.OK Then ' 'If OK was clicked, set _Path = to selected folder path ' 'and/or _EntryID = to selected folder Entry ID ' Dim _Path As String = myBrowser.Path ' Dim _EntryID As Integer = myBrowser.EntryId ' End If ' ' Cleanup ' myBrowser = Nothing Imports System.Windows.Forms Imports Laserfiche.RepositoryAccess Public Class PFTBrowser Private myLFSession As Session = Nothing '********************************* '********************************* #Region "Public Properties for Browser" Private _EntryId As Integer Public ReadOnly Property EntryId() As Integer Get Return _EntryId End Get End Property Private _Path As String Public ReadOnly Property Path() As String Get Return _Path End Get End Property Private _sServerName As String Public WriteOnly Property LFServerName() As String Set(value As String) _sServerName = value End Set End Property Private _sRepositoryName As String Public WriteOnly Property LFRepositoryName() As String Set(value As String) _sRepositoryName = value End Set End Property Private _sUserName As String Public WriteOnly Property LFUserName() As String Set(value As String) _sUserName = value End Set End Property Private _sPassword As String Public WriteOnly Property LFPassword() As String Set(value As String) _sPassword = value End Set End Property Private _bWinAuth As Boolean Public WriteOnly Property bLFWinAuth() As Boolean Set(value As Boolean) _bWinAuth = value End Set End Property #End Region '********************************* '********************************* #Region "Private LF Log In/Out" Private Sub LFLogout() ' Only process if LFDatabase object is not nothing If (myLFSession IsNot Nothing) Then Try ' Log Out myLFSession.LogOut() myLFSession.Discard() ' Log Errors Here Catch ex As Exception End Try ' Ensure LFDatabse object is nothing myLFSession = Nothing End If End Sub Private Sub LFLogin(sServer As String, sRepo As String, bWinAuth As Boolean, Optional sUser As String = "admin", Optional sPW As String = "") ' Only process if LFDatabase object is nothing If myLFSession Is Nothing Then Try ' Create LFServer object for server Dim lfserv As New Server(sServer) ' Set LFRepository object Dim LFRepo As New RepositoryRegistration(lfserv, sRepo) myLFSession = New Session() myLFSession.ApplicationName = Application.ProductName ' Process Authentication If bWinAuth Then ' Use blank User and Password for WinAuth myLFSession.LogIn(LFRepo) Else 'Do not use empty user name for LF Auth (if that is what was passed) If String.IsNullOrEmpty(sUser) Then ' Try using admin with blank password sUser = "admin" sPW = "" End If myLFSession.LogIn(sUser, sPW, LFRepo) End If Catch ex As Exception ' Log Errors Here MessageBox.Show(ex.Message) ' Ensure Session object is nothing myLFSession = Nothing End Try End If End Sub #End Region '********************************* '********************************* #Region "Private Subs & Functions" Private Sub InitTV() ' Create new Node Dim RootTreeNode As New TreeNode ' Set Node Text = Repository name RootTreeNode.Text = myLFSession.Repository.Name ' Make new Node expandable RootTreeNode.Nodes.Add("") ' Add new Node to TreeView tvFolderTree.Nodes.Add(RootTreeNode) ' Expand new Node tvFolderTree.Nodes.Item(0).Expand() End Sub Private Sub tvFolderTree_AfterExpand(sender As System.Object, e As System.Windows.Forms.TreeViewEventArgs) Handles tvFolderTree.AfterExpand ' Clear any existing child nodes e.Node.Nodes.Clear() ' Get full path from node Dim sFullPath As String = e.Node.FullPath ' Remove repository name from path for LF use If sFullPath.Contains("\") Then sFullPath = sFullPath.Replace(sFullPath.Substring(0, sFullPath.IndexOf("\")), "") Else sFullPath = "\" End If Try 'Create FolderInfo object fron Node path Dim LFFold As FolderInfo = Folder.GetFolderInfo(sFullPath, myLFSession) ' configure which columns to retrieve Dim entrySetting As New EntryListingSettings() ' Only get folders entrySetting.EntryFilter = EntryTypeFilter.Folders ' Include Entry Type entrySetting.AddColumn(SystemColumn.EntryType) ' Include Entry Name entrySetting.AddColumn(SystemColumn.DisplayName) ' get the contents of the lf folder Using listing As FolderListing = LFFold.OpenFolderListing(entrySetting, 1000) ' the listing is 1-based, Dim rowCount As Integer = listing.RowsCount For i As Integer = 1 To rowCount ' Process only folders ' Listing should never get anything other than folder, but will check anyway If listing.GetDatumAsString(i, SystemColumn.EntryType).ToLower = "folder" Then ' Create new Node Dim NewTreeNode As New TreeNode ' Set Node Text = folder name NewTreeNode.Text = listing.GetDatumAsString(i, SystemColumn.DisplayName) ' Make new Node expandable NewTreeNode.Nodes.Add("") ' Add new Node to TreeView e.Node.Nodes.Add(NewTreeNode) End If Next End Using ' Cleanup LFFold.Dispose() LFFold = Nothing Catch ex As Exception End Try End Sub Private Sub tvFolderTree_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvFolderTree.AfterSelect ' Get full path from node Dim sFullPath As String = e.Node.FullPath ' Remove repository name from path for LF use If sFullPath.Contains("\") Then sFullPath = sFullPath.Replace(sFullPath.Substring(0, sFullPath.IndexOf("\")), "") Else sFullPath = "\" End If Try 'Create FolderInfo object from Node path Dim LFFold As FolderInfo = Folder.GetFolderInfo(sFullPath, myLFSession) ' Get Entry ID of selected Node _EntryId = LFFold.Id ' Get full path of folder _Path = LFFold.Path ' Cleanup LFFold.Dispose() LFFold = Nothing Catch ex As Exception End Try End Sub #End Region '********************************* '********************************* #Region "Button Actions for Browser" Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() End Sub Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Close() End Sub #End Region '********************************* '********************************* #Region "Form Actions for Browser" Public Sub New(ByVal LFServerName As String, ByVal LFRepositoryName As String, ByVal UseWindowsAuthentication As Boolean, ByVal LFUserName As String, ByVal LFPassword As String) MyBase.New() InitializeComponent() LFLogin(LFServerName, LFRepositoryName, UseWindowsAuthentication, LFUserName, LFPassword) End Sub Private Sub PFTBrowser_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Make TreeView fill panel1 Me.tvFolderTree.Dock = DockStyle.Fill ' Initialize TreeView InitTV() End Sub Private Sub PFTBrowser_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed ' Cleanup LFLogout() End Sub #End Region '********************************* '********************************* End Class