2015-07-29

PowerShellでユーザーフォームを作る - コンボボックス編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

以前の投稿で、インプットボックスやメッセージボックスをご紹介しましたが、それは非常にシンプルなものであり、使い勝手が良い反面、自由度が低いものでした。

過去の投稿はこちら↓↓
【PowerShellでInputBoxを使用する】
【PowerShellでMessageBoxを使用する】


ユーザーフォーム 6回目は「PowerShellでユーザーフォームを作る - コンボボックス編 -」です。

   ユーザーフォーム 1回目 【PowerShellでユーザーフォームを作る - 基礎編 -
   ユーザーフォーム 2回目 【PowerShellでユーザーフォームを作る - オプション紹介 -
   ユーザーフォーム 3回目 【PoweShellでユーザーフォームを作る - リストボックス編 -
   ユーザーフォーム 4回目 【PowerShellでユーザーフォームを作る - チェックボックス編 -
   ユーザーフォーム 5回目 【PowerShellでユーザーフォームを作る - ラジオボタン編 -


コンボボックスと言われても、どんなものかすぐには浮かばない方もいらっしゃるかと思います。

百聞は一見に如かず。

コンボボックスは下記のようなものを言います。


<今回の完成品>


この画像のうち濃い緑の部分がコンボボックスです。
このコンボボックスを展開すると以下のようになっています。
これなら見たことがあるのではないでしょうか。


使い方はリストボックスと似ていますが、リストボックスはフォーム上で大きいスペースを必要とするのに対し、コンボボックスは小さいスペースで済むことが利点です。

また、コンボボックスと似たものとしてドロップダウンリストがあります。
この2つを同じものであると思われている方もいらっしゃるようですが、厳密に言うと少し異なります。

ざっと調べた内容を要約すると、下記の違いがあります。

  コンボボックス    … 一覧から選択、もしくはユーザーが直接入力で指定できる
  ドロップダウンリスト … 一覧から選択のみ(ユーザー入力不可)


今回作成するコンボボックスは、一覧にりんご、みかん、メロン、いちご、ぶどうが表示されますが、それ以外も指定することができるため、直接「オレンジ」と入力しても問題ないということです。
反対にドロップダウンリストは、ユーザー入力ができず、必ずりんご、みかん、メロン、いちご、ぶどうの中から選択しなければなりません。


前置きが長きなりましたが、ここから例文を記述します。


---------ここから-------------------------------------------------------------------------------------
# ユーザーフォームを作る - コンボボックス編 -

# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# フォントの指定
$Font = New-Object System.Drawing.Font("メイリオ",12)

# フォーム全体の設定
$form = New-Object System.Windows.Forms.Form
$form.Text = "選択"
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = "CenterScreen"
$form.font = $Font

# ラベルを表示
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,10)
$label.Size = New-Object System.Drawing.Size(270,20)
$label.Text = "好きな果物を選択してください"
$form.Controls.Add($label)

# OKボタンの設定
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(40,100)
$OKButton.Size = New-Object System.Drawing.Size(75,30)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

# キャンセルボタンの設定
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(130,100)
$CancelButton.Size = New-Object System.Drawing.Size(75,30)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

# コンボボックスを作成
$Combo = New-Object System.Windows.Forms.Combobox
$Combo.Location = New-Object System.Drawing.Point(50,50)
$Combo.size = New-Object System.Drawing.Size(150,30)
$Combo.DropDownStyle = "DropDown"
$Combo.FlatStyle = "standard"
$Combo.font = $Font
$Combo.BackColor = "#005050"
$Combo.ForeColor = "white"

# コンボボックスに項目を追加
[void] $Combo.Items.Add("りんご")
[void] $Combo.Items.Add("みかん")
[void] $Combo.Items.Add("メロン")
[void] $Combo.Items.Add("いちご")
[void] $Combo.Items.Add("ぶどう")

# フォームにコンボボックスを追加
$form.Controls.Add($Combo)

# フォームを最前面に表示
$form.Topmost = $True

# フォームを表示+選択結果を変数に格納
$result = $form.ShowDialog()

# 選択後、OKボタンが押された場合、選択項目を表示
if ($result -eq "OK")
{
    $AAA = $combo.Text
}else{
exit
}

Write-Output $AAA
---------ここまで-------------------------------------------------------------------------------------

上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。
完成品と同じものが表示されるはずです。


それでは解説をしていきます。
また過去の記事で解説した部分については割愛致します。

内容をご確認いただきたい場合は ユーザーフォーム - 基礎編 - をご覧ください。


*****解説*********************************************************

# コンボボックスを作成
$Combo = New-Object System.Windows.Forms.Combobox
$Combo.Location = New-Object System.Drawing.Point(50,50)
$Combo.size = New-Object System.Drawing.Size(150,30)
$Combo.DropDownStyle = "DropDown"
$Combo.FlatStyle = "standard"
$Combo.font = $Font
$Combo.BackColor = "#005050"
$Combo.ForeColor = "white"

ここでは、WindowsフォームのComboboxクラスを使用して、コンボボックスを作成しています。
この中でのポイントはDropDownStyleプロパティFlatStyleプロパティです。

冒頭で、コンボボックスとドロップダウンリストは異なると書きましたが、このDropDownStyleプロパティでその切替が可能です。
DropDownStyleプロパティは「DropDown」「DropDownList」「Simle」から選択することができます。
現状は「DropDown」となっているので、一覧以外の指定(ユーザーによる直接入力)が可能です。
(試しに、「オレンジ」と入力してOKを押してみてください)

これを「DropDownList」に変更して再度実行すると、見た目も変化し、ユーザー入力ができなくなっていることがわかると思います。

DropDownStyleプロパティ:DropDownListにした場合

次にFlatStyleプロパティについてですが、これはコンボボックス部分の見た目を変化させるもので、「Flat」「Popup」「Standard」「System」から選択することができます。
この違いについては、各自でご確認ください。


# コンボボックスに項目を追加
[void] $Combo.Items.Add("りんご")
[void] $Combo.Items.Add("みかん")
[void] $Combo.Items.Add("メロン")
[void] $Combo.Items.Add("いちご")
[void] $Combo.Items.Add("ぶどう")

ここでは、コンボボックスに項目を追加しています。

***********************************************************************************

解説は以上となります。

コンボボックスでももちろん背景色や文字色、フォントの指定をすることもできます。
それぞれの設定方法については、 オプションの紹介 をご覧ください。 

今回はコンボボックスの背景色を濃い緑に指定しています。
この色は、なつかしき学生時代の黒板を意識しているものです。
最近は黒板が廃れ、ホワイトボードが主流ということで、寂しいものですね。

この色は"red"や"black"などのように指定できませんので、16進数で"#005050"と指定しています。(RGBだと、赤:0 緑:80 青:80 となります)

黒板世代の方で、もし気に入ったのであればご使用ください。

=======================================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=======================================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=======================================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/