【 0. 目次 】
1. Download
2. 解説
3. 使用例
【 1. Download 】
このコマンドレットは、YokoKen.PowerShell.Utilityというスナップインに含まれています。このスナップインは以下の記事にて公開しています。
YokoKen.PowerShell.Utility
【 2. 解説 】
[ 2.1 コマンド名 ]
このコマンドレットには、Run-Formという名前が付けられています。
[ 2.2 概要 ]
Run-Formコマンドレットは、指定したフォームオブジェクトを、別スレッド上で表示します。別スレッド上で表示されるため、表示中もPowerShellからフォームを操作することができます。
[ 2.3 構文 ]
Run-Formコマンドレットの構文は以下のようになっています。
Run-Form [-Target] <System.Windows.Forms.Form>
[ パラメータ ]
・Target <System.Windows.Forms.Form>
対象となるフォームオブジェクトを指定します。
必須 : true
位置 : 1
既定値 : -
パイプライン入力を許可する : true (ByValue)
ワイルドカード文字を許可する : false
Nullを許可する : false
【 3. 使用例 】
以下の例のコマンドを実行すると、フォームが表示され、PowerShellが入力待機状態となります。
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms");
$sampleForm = New-Object "System.Windows.Forms.Form";
$helloButton = New-Object "System.Windows.Forms.Button";
$helloButton.Text = "Click";
$helloButton.Location = New-Object "System.Drawing.Point" (50, 50);
$helloButton.Add_Click({[System.Windows.Forms.MessageBox]::Show("Hello Hoge !")});
$sampleForm.Controls.Add($helloButton);
# コマンドレット実行
Run-Form $sampleForm;
フォーム表示後、以下の例のコマンドを実行すると、PowerShellからフォームを操作できることが確認できます。
# フォームを最前面に固定
$sampleForm.TopMost = $True;
# フォームのタイトルを設定
$sampleForm.Text = "Sample Form";
# フォームの不透明度を設定
$sampleForm.Opacity = 0.5;
# フォームの位置を設定
$sampleForm.Location = New-Object "System.Drawing.Point" (0, 0);
フォーム表示後のコントロールの追加は、以下のように、Invokeメソッドを使用して行います。
Invokeメソッドを使用しない場合、エラーとなってしまうので注意してください。
なお、以下の例では、同じスナップインに含まれているConvertTo-Delegateコマンドレットを使用して、PowerShell関数をMethodInvokerにキャストしています。ConvertTo-Delegateコマンドレットに関しては、こちらの記事を参照してください。
$exitButton = New-Object "System.Windows.Forms.Button";
$exitButton.Text = "Exit";
$exitButton.Location = New-Object "System.Drawing.Point" (100, 100);
$exitButton.Add_Click({$sampleForm.Close()});
$sampleForm.Invoke((ConvertTo-Delegate {$sampleForm.Controls.Add($exitButton)} System.Windows.Forms.MethodInvoker))
フォームを閉じる時は、フォームの閉じるボタンから閉じることも、PowerShellから以下のコマンドを実行して閉じることもできます。
# フォームの破棄
$sampleForm.Dispose();
トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/65-924ee55b