0

検証イベントを発生させるのに本当に苦労しています。問題を示すために、非常に単純な Windows フォームを作成しました。フォームには 2 つのテキスト ボックスが含まれており、最初のテキスト ボックスでタブ キーが押されたときに検証イベントが発生することを期待していますが、そうではありません。Windows 7 Professional SP1 で実行されている Powershell V4.0 を使用しています。コードは次のとおりです:-

Function ValidateField( [string]$FieldValue )
{
    Write-Host "ValidateField: Function Entered"

    if ( $FieldValue -eq $Null -Or $FieldValue.Trim().Length -eq 0 ) { Return $True } else { Return $False }
}

Function GenerateForm 
{
    Write-Host "GenerateForm: Function Entered"

    [Reflection.Assembly]::LoadWithPartialName( "System.Windows.Forms"  ) | Out-Null
    [Reflection.Assembly]::LoadWithPartialName( "System.Drawing"  ) | Out-Null

    $Form = New-Object System.Windows.Forms.Form ; $IFWS = New-Object System.Windows.Forms.FormWindowState
    $Code = New-Object System.Windows.Forms.TextBox ; $Desc = New-Object System.Windows.Forms.TextBox
    $Form.ClientSize = New-Object System.Drawing.Size( 400,200 ) 
    $Form.StartPosition = "CenterScreen" ; $Form.add_Load( $FormLoad )

    $OnLoadForm_StateCorrection = { $Form.WindowState = $IFWS }

    $Code.DataBindings.DefaultDataSourceUpdateMode = 0 ; $Code.Location = New-Object System.Drawing.Size( 10,10 )
    $Code.Size = New-Object System.Drawing.Size( 40,20 ) ; $Code.CausesValidation = $True

    $Code_Validating = [System.ComponentModel.CancelEventHandler] { 

        { $Result = ( ValidateField $Code.Text )

        if ( $Result -eq $True ) { $_.Cancel = $True } }
    }

    $Form.Controls.Add( $Code )

    $Desc.DataBindings.DefaultDataSourceUpdateMode = 0 ; $Desc.Location = New-Object System.Drawing.Size( 100,10 )
    $Desc.Size = New-Object System.Drawing.Size( 169,20 ) ; $Form.Controls.Add( $Desc )

    $IFWS = $Form.WindowState ; $Form.add_Load( $OnLoadForm_StateCorrection ) ; $Form.ShowDialog() | Out-Null
}

GenerateForm

非常に単純なものが欠けているだけかもしれませんが、これは3日間私を怒らせているので、どんな助けも感謝して受け入れました.

4

1 に答える 1

0

Validatingイベントに接続している場所がわかりません。$Code_Validating 割り当てを次のように置き換えます。

$Code.add_Validating({ 
    $result = ValidateField $sender.Text
    if ($result) {$eventArgs.Cancel = $true}
})
于 2014-02-26T15:03:15.200 に答える