シンプルに文字を入力をするダイアログになります。
<#
.SYNOPSIS
文字を入力するダイアログのサンプル
#>
using namespace System.Windows.Forms
using namespace System.Drawing
using namespace System.IO
Set-StrictMode -Version Latest
$ErrorActionPreference = "STOP"
#?アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
function InputDialogShow
{
param(
$form,
$message="こちらに入力",
$title="タイトル",
$inputText=""
)
$dialog = [Form]::new() | ForEach-Object {
$_.Size = "360,200"
$_.Text = $title
$_
}
$controls = @(
[Label]::new() | ForEach-Object {
$_.Size = "300,30"
$_.Location = "20,20"
$_.Text = $message
$_
}
[TextBox]::new() | ForEach-Object {
$_.Name = "InputText"
$_.Size = "300,30"
$_.Location = "20,60"
$_.Text = $inputText
$_.Add_KeyDown({
if ($_.KeyCode -eq "Return")
{
$dialog.DialogResult = 1;
$dialog.Close();
}
})
$_
}
[Button]::new() | ForEach-Object {
$_.Size = "100,30"
$_.Location = "60,100"
$_.Text = "OK"
$_.Add_Click({
$dialog.DialogResult = 1;
$dialog.Close();
})
$_
}
[Button]::new() | ForEach-Object {
$_.Size = "100,30"
$_.Location = "180,100"
$_.Text = "Cancel"
$_.Add_Click({
$dialog.DialogResult = 2;
$dialog.Close();
})
$_
}
)
$dialog.Controls.AddRange($controls)
$result = $dialog.ShowDialog($form)
$inputText = $dialog.Controls["InputText"].Text
return [PSCustomObject]@{
"DialogResult"=$result
"InputText"=$inputText
}
}
function Main
{
# メインフォームの生成
$form = [Form]::new() | ForEach-Object {
$_.Size = "400,300"
$_
}
# コントロールの生成
$controls = @(
[Button]::new() | ForEach-Object {
$_.Size = "100,50"
$_.Location = "130,100"
$_.Text = "実行"
$_.Add_Click({
$result = InputDialogShow $this "こちらに入力" "タイトル" "初期値"
if ($result.DialogResult -eq 1)
{
[MessageBox]::Show($result.InputText)
}
})
$_
}
)
# フォームにコントロールを配置
$form.Controls.AddRange($controls)
# フォームの表示
$form.ShowDialog()
}
Main
「実行」ボタンを押す
ダイアログが表示
文字を入力し「エンターキー」または「OK」ボタンを押す
入力した文字列がメッセージボックスに表示
ダイアログのルーチンをInputDialogShowにまとめていますので、引数に呼び出し元のコントロールをセットし呼び出します。
戻り値にPSCustomObjectでDialogResultと入力したテキストがセットされています。
DialogResultは1がOK,2がCancelになります。
コメント