【Powershell】ドラッグ&ドロップの実装

PowershellでUIを実装する

Poweshellには多彩なUIが実装されています。その中でもドラッグ&ドロップできるエリアを使用してみたいと思います。
下記サイトを参考にさせていただきました。と言ってもまるまるコピペです笑
letspowershell.blogspot.jp

Add-Type -AssemblyName System.Windows.Forms

$form = New-Object System.Windows.Forms.Form
#formのサイズ
$form.Size = "500,300"
$form.StartPosition = "CenterScreen"
$form.Text = "タイトル"

#リストボックスの生成
$Listbox =  New-Object System.Windows.Forms.ListBox
$Listbox.Location = "10,10"
#リストボックスのサイズ
$Listbox.Size = "470,200"
#ドラッグ&ドロップを許可
$Listbox.AllowDrop = $True

# ドラッグエンター イベント
$Enter = {
  $_.Effect = "ALL"
   #write-host "このタイミングです!!"
}
#addしないとドラッグできない
$Listbox.Add_DragEnter($Enter)

#ドラッグドロップ イベント
$Drop = {
    $Name = @($_.Data.GetData("FileDrop"))
     #1つずつ取得し、リストボックスに追加
    For ( $i = 0 ; $i -lt $Name.Count ; $i++ )
    {
        $Listbox.Items.Add($Name[$i])
    }
}
#addしないとドロップできない
$Listbox.Add_DragDrop($Drop)

#開始ボタン
$Button = New-Object System.Windows.Forms.Button
$Button.Location = "200,220"
$Button.size = "80,30"
$Button.text  = "開始"
$Button.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.Controls.AddRange(@($Listbox,$Button))
$Form.Showdialog()

これで、ドラッグエリアが表示されるので、ドロップしたファイルのパスが表示されます。
この実装によりファイルパスの取得が楽になりました。

ドロップしたファイルパスは$Listboxに格納されていきます。
なのでこれを使用してファイルをオープンなど使用しています。

 #ドロップしたExcelファイル1を開く
$path = $Listbox.Items[0]
$excelFile1 = $excel.Workbooks.Open($path)
 #ドロップしたExcelファイル2を開く
$path2 = $Listbox.Items[1]
$excelFile1= $excel.Workbooks.Open($path2)

UIを実装したときはPowershell ISEから実行してください。
powershellコンソールや右クリックの「powershellで実行」をするとエラーになります。

原因は実行時のSTAとMTAモードの違いなんですが、それはまた次回ということで~