我有一个小程序接受一个整数并将其转换为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
}
}
}
答案 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
推断输入值更容易