今回は「PowerShellでユーザーフォームを作る - スクロールバー編 -」です。
スクロールバーは、下限・上限で範囲の決まっている値を変化させる際によく用いられるものです。
<今回の完成品>
バーを動かすと、0~100の間で数値が増減します。
それでは、スクリプトを記述します。
---------ここから-------------------------------------------------------------------------------------
# ユーザーフォームを作る - スクロールバー編 -# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms
#フォームの設定
$form = New-Object System.Windows.Forms.Form
$form.Size = "250,200"
$form.startposition = "centerscreen"
$form.text = "スクロールバー"
$form.MaximizeBox = $False
$form.MinimizeBox = $False
$form.BackColor = "lightgreen"
#スクロールバー
$Bar = New-Object System.Windows.Forms.HScrollBar
$Bar.Location = "10,50"
$Bar.size = "200,30"
$Bar.maximum = "100"
$Bar.minimum = "0"
$Bar.largechange = "1"
$form.Controls.Add($Bar)
#ラベル
$Label = New-Object System.Windows.Forms.Label
$Label.location = "50,90"
$Label.text = $Bar.value
$form.Controls.Add($Label)
#イベント
$Bar.Add_ValueChanged({$Label.text = $Bar.value})
# フォームを表示する
$Form.Showdialog()
---------ここまで-------------------------------------------------------------------------------------
上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。
完成品と同じものが表示されるはずです。
それでは解説をしていきます。
また過去の記事で解説した部分については割愛致します。
内容をご確認いただきたい場合は【ユーザーフォーム - 基礎編 -】をご覧ください。
*****解説*****************************************************************************
#スクロールバー
$Bar = New-Object System.Windows.Forms.HScrollBar
$Bar.Location = "10,50"
$Bar.size = "200,30"
$Bar.maximum = "100"
$Bar.minimum = "0"
$Bar.largechange = "1"
$form.Controls.Add($Bar)
ここではHScrollBarクラスをインスタンス化し、変数Barに格納しています。
Maximumプロパティに最大値、Minimumプロパティには最小値を設定します。
さらにLargeChangeプロパティは「バーを大きく動かしたとき」(下図をクリックしたとき)にどれだけ値を変化させるのかを指定します。
今回は"1"にしていますが、例えば"10"とすれば、1クリックで10動きます。
#イベント
$Bar.Add_ValueChanged({$Label.text = $Bar.value})
ここでは、スクロールバーにValueChangedイベントを設定しています。
つまり、スクロールバーの値が変化すると、同時にラベルの値がスクロールバーの値に変化します。
**************************************************************************************************
解説は以上となります。
PowerShellでのイベント記述方法は、ネット上ではあまり情報がないようで、少し苦労しました・・・。
今後は様々なイベントについても少しずつ記述していきたいと思います。
=============================================================
ツイート
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=============================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!
=============================================================
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=============================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!
=============================================================
有益な情報ありがとうございます。
返信削除ところで、本サンプルの 29 行目
$Label.Controls.Add($Label)
ですが、
$form.Controls.Add($Label)
と思います。
「コントロールの循環参照が発生しました。」
と言うエラーが発生します。
匿名様
削除コメントをいただきましてありがとうございます。
ご指摘の通り、$Labelと$formを間違えておりました。
早速修正致しました。
またお気づきの点がございましたらご連絡いただけますと幸いです。