Form
最小限のフォーム
ps1
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text = "タイトル"
$form.Size = New-Object System.Drawing.Size(600, 200)
[void]$form.ShowDialog()
ウィンドウ位置の指定 - form.Location
ps1
Add-Type -AssemblyName System.Drawing
...
$form.StartPosition = "Manual"
$screen = [System.Windows.Forms.Screen]::PrimaryScreen
$area = $screen.WorkingArea
$form.Location = New-Object System.Drawing.Point(
($area.Width - $form.Width),
($area.Height - $form.Height)
)
場所 | x | y |
---|---|---|
左上 | 0 | 0 |
左上 | 0 | $area.Height - $form.Height |
右上 | $area.Width - $form.Width | 0 |
右下 | $area.Width - $form.Width | $area.Height - $form.Height |
注意点
Point($a - $x, $b - $y)
という形だと、引数が配列と認識されてしまうらしく、以下のようにエラーとなる。
[System.Object[]] に 'op_Subtraction' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。
ディスプレイ
アクティブなディスプレイを取得するには Win32 API を使用すると出来るらしい
いったん 主ディスプレイ [System.Windows.Forms.Screen]::PrimaryScreen
のみ対応としよう。
Form に要素を配置 - form.Controls.Add
例として、TextBox を追加。
ps1
$input = New-Object System.Windows.Forms.TextBox
$input.Location = New-Object System.Drawing.Point(10, 10)
$input.Width = 560
$input.Anchor = "Top, Left, Right"
$form.Controls.Add($input)
Width
,Height
で初期のサイズを指定- サイズを親要素に合わせて伸縮させたい場合は、追従させたい方向を
Anchor
を指定
イベントを追加
引き続き、TextBox にイベントを追加。
仕組みは謎だが、params($sender, $e)
を呼んでおくと、
C# からの引数呼び出しに近い動きをする。
自分的 名前ルールでは $sender
を、 $<元の要素>Ref
という名前にすることにしよう。
ps1
$input.Add_TextChanged({
param($sender, $e)
$inputRef = $sender
Write-Host $inputRef.Text
})