2016-07-15 20 views
1

私は整数を受け取り、それをDateTimeに変換する小さなプログラムを持っています。しかし、私はKeyCodeを使用して、キーボードと数字の両方の数字だけを許可し、特殊文字と文字を排除しようとしています。私のコードでは、シフト + 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

um、 '-and -not $ _。Shift 'を2番目の' If'文に追加するのはどうですか? – TheMadTechnician

答えて

5

代わりのKeyDownイベントをインターセプトし、私は単純にTextBoxからTextChanged eventが発生するたびに任意の数字以外の文字を削除したい:入力を推測しようとするよりも

$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イベントの値からの値

+0

私はまだバックスペースを使用したいまたは矢印キーを削除する(私はまだ矢印と削除をコードする必要があります)、これはkeydownを使用していた理由です –

+0

あなたはまだ矢印とバックスペースを使用して、私の答えのコードは、テキストボックスの値が入力値*が変更されるたびに数字の数字のみで構成されていることを確認しています。 –

+0

このアプローチのもう1つの利点は、ユーザーが書式設定された日付時間文字列(たとえば "15:03 01/12/12")をコピーして貼り付けることができ、特殊文字が自動的に削除されるためです代わりに "150301122013") –

関連する問題