冒頭の入力フォームは、Windowsに実装されたPowerShellで作ってみました。
どうも、ウインドウズには、この手のフォームのオカズが仕組んであるみたい。
エクセルのVBAを起動して、ユーザーフォームで作ったのとそっくりさんです。
というより、VBAがウインドウズのフォームを引っ張って来ているのでしょう。
今までは、エクセルのマクロに専念して、仕事でプログラムを組んできました。
ただ、開発されて既に三十年の言語ですから、64ビット化からも距離があるな。
マイクロソフトもOfficeにVBAを残すと言ってはいても、古めかしい感じです。
そう思うと、他に代用できるアプリがないかと、たどり着いたのがこの言語ね。
まあ、ウインドウズでアプリケーションソフトウェアを作るのが目的の言語だ。
簡易的なプログラミング言語と謳ってはおりますが、VBAよりは格段に難しい。
それでも、Linuxの記述とか面白半分で触っていたので、何とか勉強中なんだ。
要するに、Linux用のエイリアス(別名)のコマンドが搭載されていたりする。
加えて、斜め読みしていたC#言語の記述なんかと、雰囲気がよく似ています。
そこで、ネットから寸借したフォームのコードを、参考がてら紹介してみます。
入力ボックスに入力された値を、パワーシェルの画面に出力するだけのコード。
それでも、変数の設定になっていて、変数渡しの拡張性に期待しつつ奮闘中だ。
とうわけで、パワーシェルを起動させて、このコードを貼り付けてみて下さい。
次にエンターキーで実行すると、ちゃんと入力フォームもされるのが分かるな。
その一方で、VBAのユーザーフォームと違って、フォームの表示位置を細かく指定することができたりして、なかなか痒い所に手が届く記述なのだと、感心してしまう自分がいるのでした。
※サンプルコード
# ユーザーフォーム作成(ZIPファイルのフルパス入力)
Add-Type -AssemblyName System.Windows.Forms # アセンブリ読み込み
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form # フォーム作成
$form.Text = "圧縮したいファイル"
$form.Size = New-Object System.Drawing.Size(280,200)
$form.StartPosition = "Manual"
$form.Location = "100,100"
$OKButton = New-Object System.Windows.Forms.Button #OKボタン設定
$OKButton.Location = New-Object System.Drawing.Point(40,120)
$OKButton.Size = New-Object System.Drawing.Size(75,30)
$OKButton.Text = "OK"
$OKButton.DialogResult = "OK"
# 列挙子名:None, OK, Cancel, Abort, Retry, Ignore, Yes, No
$CancelButton = New-Object System.Windows.Forms.Button #キャンセルボタン
$CancelButton.Location = New-Object System.Drawing.Point(130,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,30)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = "Cancel"
# 列挙子名:None, OK, Cancel, Abort, Retry, Ignore, Yes, No
$label = New-Object System.Windows.Forms.Label # ラベルの設定
$label.Location = New-Object System.Drawing.Point(10,30)
$label.Size = New-Object System.Drawing.Size(250,20)
$label.Text = "フルパスでファイル名(拡張子付)で入力してください"
$textBox = New-Object System.Windows.Forms.TextBox #入力ボックス設定
$textBox.Location = New-Object System.Drawing.Point(10,70)
$textBox.Size = New-Object System.Drawing.Size(245,50)
$form.AcceptButton = $OKButton # キー・ボタン関係
$form.CancelButton = $CancelButton
$form.Controls.Add($OKButton) # ボタン等をフォーム追加
$form.Controls.Add($CancelButton)
$form.Controls.Add($label)
$form.Controls.Add($textBox)
# フォームを表示させ、その結果を受け取る
$result = $form.ShowDialog()
# 結果による処理分岐
if ($result -eq "OK") {
$x = $textBox.Text
$x
}
0 件のコメント:
コメントを投稿