Для демонстрации, вот простая форма, которая заполняет список путями к подпапкам.
$rootFolder = 'PATH TO YOUR ROOTFOLDER HERE'
# get an array of subfolder full names in the $rootFolder
$subfolders = (Get-ChildItem -Path $rootFolder -Recurse -Directory).FullName
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text = "SubFolders"
$form.Size = New-Object System.Drawing.Size(300,300)
$form.StartPosition = "CenterScreen"
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,180)
$listBox.Anchor = 'Top,Right,Bottom,Left'
# fill the listbox with subfolder names
$listBox.items.AddRange($subfolders)
# add an event handler on the listbox to do something with the selected item
$listBox.Add_Click({
# here put your code to perform some action with the selected subfolder
$selected = $listBox.GetItemText($listBox.SelectedItem)
# for demo, simply show a messagebox
[System.Windows.Forms.MessageBox]::Show("You selected subfolder`r`n`r`n$selected", "Subfolder")
})
$form.Controls.Add($listBox)
$form.ShowDialog()
$form.Dispose()
Обновление Согласно вашему комментарию, вы быхотел бы добавить второй столбец в список, в котором отображается дата LastWriteTime (lastModified).
Предыдущий код может быть довольно легко адаптирован для добавления строковых элементов, которые являются комбинацией папки FullNames в сочетании с LastWriteTimeиспользуя какой-то символ разделения.Позже, разделите выделенный элемент на этого персонажа, чтобы получить только имя.
Однако, для удобства пользователя, это может привести к путанице.
Добавление нового столбца было бы лучше, но хотя объект Listbox действительно имеет свойство MultiColumn
, результат использования этого, скорее всего, NOT того, что вы ожидаете.
Ниже обновленного кода для использования нескольких столбцов в ListView объект вместо ListBox
.
$rootFolder = 'PATH TO YOUR ROOTFOLDER HERE'
# get an array of subfolder objects in the $rootFolder
$subfolders = Get-ChildItem -Path $rootFolder -Recurse -Directory
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text = "SubFolders"
$form.Size = New-Object System.Drawing.Size(600,400)
$form.StartPosition = "CenterScreen"
$listView = New-Object System.Windows.Forms.ListView
$listView.Location = New-Object System.Drawing.Point(10,40)
$listView.Size = New-Object System.Drawing.Size(560,280)
$listView.Anchor = 'Top,Right,Bottom,Left'
$listView.View = 'Details'
$listView.FullRowSelect = $true
$listView.GridLines = $true
[void]$listView.Columns.Add("Folder", 338);
[void]$listView.Columns.Add("LastModified", 200);
# fill the listbox with subfolder names and Last Modified dates
$subfolders | ForEach-Object {
$row = New-Object System.Windows.Forms.ListViewItem( $_.FullName) # the folder path goes into the first column
[void]$row.SubItems.Add($_.LastWriteTime.Tostring()) # the LastWriteTime goes into the second column
[void]$listView.Items.Add($row)
}
# add an event handler on the listbox to do something with the selected item
$listView.Add_Click({
# here put your code to perform some action with the selected subfolder
$selected = $listView.SelectedItems[0].Text
# for demo, simply show a messagebox
[System.Windows.Forms.MessageBox]::Show("You selected subfolder`r`n`r`n$selected", "Subfolder")
})
$form.Controls.Add($listView)
[void]$form.ShowDialog()
$form.Dispose()
Надеюсь, что поможет