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クラスを使ってそこに張り込んでいくか、できるだけコードが少なくなる、且つ一行が短くなる方法を探してみます。