Thursday, June 12, 2008

Windows Formを表示する(PowerShell Tips)

コントロールを追加する(PowerShell Tips)

でWindows Formアプリケーションの作成方法をみてきました。

今回から何回かに分けて、過去に紹介した簡易XMLビューアを作る(PowerShell Tips) を題材に、実際の開発例についてみていきたいと思います。

まずは簡易XMLビューアのソースです。

#===============================================================================
# View-Xml: XMLファイルを読み込んで表示する(簡易XMLViewer)
#
# 使用例
#   PS > View-Xml XMLファイルパス
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#===============================================================================
function global:View-Xml([string]$XmlFile)
{

  #パスが指定されているか?
  if ( $XmlFile.Length -eq $null )
  {
    Write-Host "XMLファイルを指定してください"
    return
  }
  
  #存在するパスか?
  if ( -not $(Test-Path $XmlFile) )
  {
    Write-Host $XmlFile + "は存在しません"
    return
  }
  
  #データセットを作成し、XMLファイルを読み込む
  $dtSet = New-Object System.Data.DataSet
  $dtSet.ReadXml($XmlFile)
  
  #===== Formの作成 =====
  [reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
  $form = New-Object System.Windows.Forms.Form
  $form.Text = $XmlFile
  $form.Width = 500
  $form.Height = 400
  
  #===== DataGridViewの作成 =====
  $dgvXML = New-Object System.Windows.Forms.DataGridView
  $dgvXML.Dock = [System.Windows.Forms.DockStyle]::Fill
  $dgvXML.DataSource = $dtSet.Tables[0]
  $form.Controls.Add($dgvXML)
  
  #===== Panelの作成 =====
  $panel1 = New-Object System.Windows.Forms.Panel
  $form.Controls.Add($panel1)
  $panel1.Dock = [System.Windows.Forms.DockStyle]::Bottom
  $panel1.Height = 30
  
  #===== [閉じる]ボタンの作成 =====
  $btnClose = New-Object System.Windows.Forms.Button
  $btnClose.Location = New-Object System.Drawing.Point(405, 4)
  $btnClose.Text = "閉じる"
  $btnClose.anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right
  $btnClose.Add_Click({$form.Close()})
  $panel1.Controls.AddRange($btnClose)
  
  #===== Formを表示 =====
  $form.ShowDialog()
}

1)関数の仕様

簡単ですが、以下のようにしたいと思います。

関数名:View-Xml

機能:パラメータで受け取ったXMLファイルを、Windows Formに配置されたデータグリッドビューに表示する

2)空の関数を作成する

まずは、関数名はVew-Xmlと決まっていますので、これを元に空の関数を作成しましょう。また、この関数のスコープはglobalとします。これは、ほかのスクリプトファイルやPowerShellコンソールから使用できるようにするためです。

それと、XMLファイルのパスをパラメータとして受け取れるようにしたいので、関数名の後ろに([string]$XmlFile)と記述します。

[string]は変数$XmlFileはstring型として扱うための指定です。

以上を元に作成した空の関数は下記の通りです。

function global:View-Xml([string]$XmlFile)
{

}

テキストエディタを開いて上記のように入力したら、View-Xml.ps1と名前をつけて保存しましょう。

3)受け取ったパラメータをチェックする

この関数を使用する人は、パラメータを渡さないかもしれませんし、指定されたパスが存在しないかもしれません。

そのようなことが起きても問題にならないように最初にチェックしてしまいましょう。

まずは、パラメータが指定されたかどうかをチェックします。

この関数はパラメータ(XMLファイルのパス)が指定されると、$XmlFileに代入します。

しかし、関数呼び出し時にパラメータを指定しなかった場合には$XmlFileはNullがセットされています。

このような場合はif文で$XmlFileがNull(PowerShellにおけるNullは$Nullと表します)かどうかをチェックします。Nullだった場合はメッセージを表示して関数を抜けるようにします。(return)

  #パスが指定されているか?
  if ( $XmlFile.Length -eq $null )
  {
    Write-Host "XMLファイルを指定してください"
    return
  }

次に、受け取ったパスの存在をチェックします。

指定されたパスが存在するかをチェックするにはTest-Pathコマンドレットを使用します。存在する場合はTrueを返してくるので、-notを付けて、falseが返されたとき、つまりパスが存在しなかったときにif文の中を実行するようにします。

  if ( -not $(Test-Path $XmlFile) )
  {
    #存在するパスか?
    Write-Host $XmlFile + "は存在しません"
    return
  }

どうでしょうか? なんとなく作り方が見えてきましたか?

この続きは次回説明したいと思います。

Thursday, June 12, 2008 11:12:55 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: