Skip to main content

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)
)
場所xy
左上00
左上0$area.Height - $form.Height
右上$area.Width - $form.Width0
右下$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
})