2012年2月28日火曜日

◆WindowsFormのイベントプロシジャで変数の現在値を参照する

久しぶりにWindowsFormを使ってみた。
以下のような感じ。

image

ソースはこの通り。

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#だとどうだろうと思い、ちょっとコーディングしてみた。

こんな感じになりそうだ。
image

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 件のコメント:

コメントを投稿