PowerShell画像ビュアーの改造(コード削減)

前回 http://d.hatena.ne.jp/fut_nis/20130816/1376614302 のプログラムのイベントハンドラが長すぎたので、ちょっと修正。

Add-Type -Assembly System.Windows.Forms
$w = New-Object System.Windows.Forms.Form
#
$ms = New-Object System.Windows.Forms.MenuStrip
$w.Controls.Add($ms)
#
$mi_file = New-Object System.Windows.Forms.ToolStripMenuItem("ファイル")
$ms.Items.Add($mi_file)
#
$pb = New-Object System.Windows.Forms.PictureBox
$pb.Location = New-Object System.Drawing.Point(0, $ms.Height)
$pb.AutoSize = $true
$w.Controls.Add($pb)
#
$mi_open = New-Object System.Windows.Forms.ToolStripMenuItem("開く")
$mi_file.DropDownItems.Add($mi_open)
#
$mi_separator = New-Object System.Windows.Forms.ToolStripSeparator
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"
$on_open_click = {if ($ofd.ShowDialog() -eq "OK"){$w.Text = $ofd.FileName; $img = New-Object System.Drawing.Bitmap($ofd.FileName); $pb.Image = $img}}
$mi_open.Add_Click($on_open_click)
$mi_file.DropDownItems.Add($mi_separator)
#
$mi_exit = New-Object System.Windows.Forms.ToolStripMenuItem("終了")
$mi_exit.Add_Click({$w.Dispose()})
$mi_file.DropDownItems.Add($mi_exit)
#
$w.ShowDialog()

修正点は、System.WIndows.Forms.PictureBoxのAutoSizeプロパティを$trueにしたこと。PowerShellの真偽値は$true と $faluse で指定できるみたい。おかげで、画像サイズに合わせてPictureBoxの大きさを変えるコード(ステートメントひとつ)が減りました。

スクロールバーを付けるには、System.Windows.Forms.FormのAutoScrollプロパティを $true にするのが簡単だと思ったら、メニューまでスクロールアウトされてしまいました。当たり前ですね。
メニューと表示部を分割するか、UserControlクラスを使ってそこに張り込んでいくか、できるだけコードが少なくなる、且つ一行が短くなる方法を探してみます。