Wednesday, June 11, 2008

Windows Formを表示する(PowerShell Tips) の続きです。

前回はWindows Formを表示するだけで終わってしまいました。

前回のスクリプトは下記の通りです。

[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object System.Windows.Forms.Form
$form.Width = 500
$form.Height = 500
$form.Text = "PowerShellからのForm表示"
$form.ShowDialog()

今回は、Windows Formにコントロールを追加する方法について説明します。

前回作成したフォームにボタンを追加してみましょう。

1)ボタンオブジェクトを作成する

ボタンオブジェクトを作成するには、下記のようにします。

$btnClose = New-Object System.Windows.Forms.Button

2)各プロパティの設定

まずはボタンの配置場所を設定しましょう。今回はフォームに直接追加しますので、座標はフォームの左上からの位置となります。配置位置はLocationプロパティを使用して、下記のように設定します。X=400, Y=420 としました。

$btnClose.Location = New-Object System.Drawing.Point(400, 420)

次に、ボタンに表示する文字を設定しましょう。ボタンに表示する文字はTextプロパティを使用します。

$btnClose.Text = "閉じる"

Anchorプロパティも設定してみましょう。Anchorプロパティは、配置したオブジェクト(ここではボタン)の親(ここではForm)がサイズ変更された場合に、それに伴って、どのように移動させるかを表す値を設定するものです。今回はボタンの下端と右端にAnchor設定します。こうするとボタンの右下がフォームの右下からの距離を保ったまま移動します。

$btnClose.anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right

ここで見慣れない記述 :: が出てきました。列挙体を表す値を使用する場合は[]の中には列挙体名を::の右側へは列挙体値を指定します。またAcnchorプロパティには1つ以上指定できるのですが、2つ以上の値を設定する場合は-bor演算子を使用します。(-or演算子ではなく、ビット演算子である-borを使用しないとうまく設定できませんので注意してください)

3)イベントを追加する

VB.NETやC#では、オブジェクトをダブルクリックしたり、稲妻アイコンのボタンを押してイベントハンドラを作成することが可能ですが、PowerShellでは自分でイベントハンドラを造る必要があります。

たとえば、。今回のボタンがクリックされたときのイベントは

$btnClose.Add_Click({$form.Close()})

のようにします。

PowerShellにおけるイベントハンドラの作成は

イベントを追加するオブジェクト.Add_イベント

のように記述します。斜体にしたところは、自分が指定するところで、色を付けた部分はおきまりのものです。

よって、今回の場合は

$btnClose.Add_Click

となっています。

イベントのところは、今回はClickイベントを作成するのでClickとしていますが、MouseEnterなど自分が作成したいイベントを指定することが可能です。

()の中身ですが、イベントが起きたときに実行するスクリプトを{}の中に記述します。これは複数行にまたがってもかまいません。また1行の中に書くのであれば、実行単位ごとに ; で区切ります。

4)作成したオブジェクトを親に追加する

こうして作成したオブジェクトは、親が必要です。親を指定して追加を行わないと作成したオブジェクトを使用することはできません。

今回の場合は、ボタン $btnClose を $form(これが親になります)に追加する必要があります。

追加を行うには

親オブジェクト.Controls.Add(追加するオブジェクト)

のようにします。

よって

$form.Controls.Add($btnClose)

とします。

5)まとめ

以上をまとめると、スクリプトは下記のようになります。

#アセンブリのロード
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")

#フォームオブジェクトの作成
$form = New-Object System.Windows.Forms.Form
$form.Width = 500
$form.Height = 500
$form.Text = "PowerShellからのForm表示"

#ボタンオブジェクトの作成
$btnClose = New-Object System.Windows.Forms.Button
$btnClose.Location = New-Object System.Drawing.Point(400, 420)
$btnClose.Text = "閉じる"
$btnClose.anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right
#Clickイベントの追加
$btnClose.Add_Click({$form.Close()})

#フォームオブジェクトへボタンを追加
$form.Controls.Add($btnClose)

#フォームオブジェクトの表示
$form.ShowDialog()

実行結果は下記のようになります。[閉じる]ボタンを押すとフォームが閉じられることを確認してください。

Wednesday, June 11, 2008 10:20:36 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: