Visual Studio PowerShell Создание списка файлов DragDrop для использования - PullRequest
0 голосов
/ 26 марта 2020

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

$handler = {
  $_.Data.GetFileDropList() | % {
    $listbox1.Items.Add($_)
  }
}
$listbox1.AllowDrop = $true
$listbox1.Add_DragEnter({$_.Effect = [Windows.Forms.DragDropEffects]::Copy})
$listbox1.Add_DragDrop($handler)

вторая цель - иметь возможность запустить мой PowerShell комбинат .pdf в пределах listbox1.

enter image description here

Мой .pdf скрипт объединения находится ниже

$button2_Click = {

$pdftk = "C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe"
$inputFolder = "E:\SIGNEDNOTES"
$outputFolder = "E:\out\"

$IntactScan = Get-ChildItem $inputFolder -File | Measure-Object | % {$_.Count}

If ($IntactScan -gt $maxItems) {

   Get-Childitem $inputFolder -filter *.pdf -Recurse 
   pdftk "E:\SIGNEDNOTES\*.pdf" cat Output $outputFolder\Rename.pdf

   Move-Item "E:\SIGNEDNOTES\*.pdf" "E:\Backup\"
}
else {
    exit
}
}

В основном я хочу, чтобы пользователь мог перетаскивать 2 x pdf файла в listBox1 и нажимать кнопку объединения, и это выводит объединенный .pdf ко второму listBox2

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Что касается моего первого вопроса, то он продолжается, но менее важный из 2

я решил другой (объединить 2 файла PDF из listBox) с помощью кода ниже



$pdftk = "C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe"
$inputFolder = $listbox1.Items
$outputFolder = "E:\out"

$CountyCount = Get-ChildItem $inputFolder -File | Measure-Object | % {$_.Count}

If ($CountyCount -gt $maxItems) {

   Get-Childitem $inputFolder -filter *.pdf -Recurse 
   pdftk $listbox1.Items cat Output $outputFolder\Combine.pdf

    $listbox1.Items.Clear()

    #Move-Item "E:\SIGNEDNOTES\*.pdf" "E:\Backup\"
}
else {
    exit
}

}```

thank you for your help
0 голосов
/ 26 марта 2020

Как упоминалось в комментариях, единственный способ показать что-то отличное от фактического значения базового элемента - это использовать свойства DataSource / DisplayMember вместо добавления имен файлов непосредственно к Items :

# Create datatable to hold the dragged files
$droppedFiles = [System.Data.DataTable]::new()
[void]$dt.Columns.Add('Name')
[void]$dt.Columns.Add('Value')

# ...
# Instruct the box to get the items from the datatable and use the `Name` column for displaying entries
$listbox1.DataSource = $droppedFiles
$listbox1.DisplayMember = 'Name'

А затем в вашем обработчике сброса:

$handler = {
  $_.Data.GetFileDropList() | % {
    $name = (Get-Item $_).Name
    $droppedFiles.Add([pscustomobject]@{Name = $name; Value = $_})
  }
  $listbox1.Refresh()
}

Вы все еще можете использовать Items для доступа только для чтения к элементам, предоставленным таблицей данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...