久しぶりにWindowsFormを使ってみた。
以下のような感じ。
ソースはこの通り。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 | Add-Type -AssemblyName System.Windows.Forms $appClass = [System.Windows.Forms.Application] $btnClass = [System.Windows.Forms.Button] $txtClass = [System.Windows.Forms.TextBox] $lblClass = [System.Windows.Forms.Label] $msgbox = [System.Windows.Forms.MessageBox] $form = New-Object System.Windows.Forms.Form -Property @{ Text="テストフォーム";Name="testForm"} $text1 = New-Object $txtClass -Property @{ Left=10;Top=10;Name="Text1";Width=35;Text=((Get-Date).ToString("yyyy"))} $button1 = New-Object $btnClass -Property @{ Left=20;Top=($text1.Top+40);Text="Run"} $button1.add_Click({ $msgbox::Show("対象は" + $text1.Text + "年度です。") }) $button2 = New-Object $btnClass -Property @{ Left=$button1.Right+10;Top=($text1.Top+40);Text="Run2"} $button2.add_Click({ $msgbox::Show("対象は" + $text1.Text + "年度です。") }) Get-Variable -Name label*,text*,button* | %{$form.Controls.Add($_.value)} $appClass::Run($form) $form.Dispose() |
特にどうということは無いのだが、ボタン1のメッセージとボタン2のメッセージ(17行目と23行目)は1つにまとめたい所。
単純に考えると、
001 002 003 004 005 006 007 008 009 010 | $text1 = New-Object $txtClass -Property @{ Left=10;Top=10;Name="Text1";Width=35;Text=((Get-Date).ToString("yyyy"))} $targetYear = "対象は" + $text1.Text + "年度です。" $button1 = New-Object $btnClass -Property @{ Left=20;Top=($text1.Top+40);Text="Run"} $button1.add_Click({ $msgbox::Show($targetYear) }) |
こんな感じに纏めたいところだが、これではテキストボックス値を変更しても反映されない。
どうでもよさそうな話だが、ちょっと迷ってしまう。
ちなみにC#だとどうだろうと思い、ちょっとコーディングしてみた。
こんな感じになりそうだ。
PowerShellでもフォーマット演算子を使うのが良いのかも。
一応PowerShellっぽさを出すと以下のようにしても良いのかなぁ。
001 002 003 004 005 006 007 008 009 010 | $text1 = New-Object $txtClass -Property @{ Left=10;Top=10;Name="Text1";Width=35;Text=((Get-Date).ToString("yyyy"))} $targetYear = {"対象は" + $text1.Text + "年度です。"} $button1 = New-Object $btnClass -Property @{ Left=20;Top=($text1.Top+40);Text="Run"} $button1.add_Click({ $msgbox::Show((&$targetYear)) }) |
0 件のコメント:
コメントを投稿