2010年6月15日火曜日

◆汎用フォームを作る3

汎用フォームを使ってマスクドテキストボックスをテストしてみる。

Set-PSDebug -Strict

. (Join-Path (Split-Path $myInvocation.MyCommand.path) M00Func.ps1)  #共通関数の読み込み

$arr = New-Object System.Collections.ArrayList[] 4
0..3 | %{$arr[$_] = New-Object System.Collections.ArrayList}

$maskText = New-Object System.Windows.Forms.MaskedTextBox
$maskText.Mask = "0000年90月90日"
$maskText.ValidatingType = [DateTime]
$maskText.add_TextChanged({
    if($maskText.ValidateText()){
        $maskLabel.Text = "チェックOK({0})" -f $maskText.ValidateText()
    }else{
        $maskLabel.Text = "チェックNG"
    }
})

[void]$arr[0].Add($maskText)

$maskLabel = New-Object System.Windows.Forms.Label
[void]$arr[1].Add($maskLabel)

$button1 = New-Object System.Windows.Forms.Button
$button1.Text = "閉じる"
$button1.Add_Click({[void] [System.Windows.Forms.MessageBox]::show("フォームを閉じます");$form.Close()})
[void]$arr[3].Add($button1)

$form = New-Object System.Windows.Forms.Form
MSet-Control $arr $form  #M00Func.ps1の関数(汎用的にフォームにコントロールを配置する)
$maskLabel.Width = 200
[void]$form.ShowDialog()


ValidatingTypeに[DateTime]型を指定しておくと、ValidateText()メソッドでパース後の値を取ってこれる。
この値がNullの時はエラー(DateTime)に変換できなかったという事。
ちなみに、条件判定(IF)ではNull , 空の文字列 , ゼロ 等の型の初期値をFalseと判定するようだ。
また、

$maskLabel.Text = "チェックOK({0})" -f $maskText.ValidateText()

この 「-f」 はフォーマット演算子。
.NETのFormatと同じ使い方ができる。

0 件のコメント:

コメントを投稿