将文本框条目限制为仅限数字或小键盘 - 不包含特殊字符

时间:2016-07-15 20:34:41

标签: powershell textbox

我有一个小程序接受一个整数并将其转换为DateTime。但是,我尝试使用KeyCode仅允许键盘和小键盘中的数字,并消除特殊字符和字母。我的代码允许 Shift + Num 输入这些特殊字符。如何消除它们的输入?

$FromDateText.Add_KeyDown({KeyDown})
$ToDateText.Add_KeyDown({KeyDown})  #TextBox

Function KeyDown()
{
    if ($FromDateText.Focused -eq $true -or $ToDateText.Focused -eq $true)
    {
        if ($_.KeyCode -gt 47 -And $_.KeyCode -lt 58 -or $_.KeyCode -gt 95 -and
            $_.KeyCode -lt 106 -or $_.KeyCode -eq 8)
        {
            $_.SuppressKeyPress = $false 
        }
        else
        {
            $_.SuppressKeyPress = $true  
        }
    }
}

1 个答案:

答案 0 :(得分:5)

我不是拦截KeyDown事件,而是在每次TextChanged event被提升时,只删除TextBox中的任何非数字字符:

$ToDateText.add_TextChanged({
    # Check if Text contains any non-Digits
    if($tbox.Text -match '\D'){
        # If so, remove them
        $tbox.Text = $tbox.Text -replace '\D'
        # If Text still has a value, move the cursor to the end of the number
        if($tbox.Text.Length -gt 0){
            $tbox.Focus()
            $tbox.SelectionStart = $tbox.Text.Length
        }
    }
})

比尝试从Key事件args

推断输入值更容易