2011-12-20 15 views
1

このコードを使用して、テキストボックスの一部のキーをブロックしています。無視された文字から「Shift + _」のみを許可

private void tb_MyTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    // Handle Shift case 
    if (Keyboard.Modifiers == ModifierKeys.Shift) 
     e.Handled = true; 

    // Handle all other cases 
    if (!e.Handled && (e.Key < Key.D0 || e.Key > Key.Z)) 
    { 
     if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9) 
     { 
      if (e.Key != Key.Back) 
       e.Handled = true; 
     } 
    } 
} 

このコードブロックあなたは+ _ Shiftキーによって得るすべてのキー_ Zまでと0から9までしかし、私はまた、許可したい除きます。

Shift + _ ?????

+0

silverlightとasp.netはこれを行う方法が異なります。 –

+0

私は銀色を使用しています。これにはどんな方法がありますか? – Waheed

+0

私はasp.netタグを削除しました。 –

答えて

2

私は、KeyPressイベント引数をチェックする考えを好きではないこと(代替のキーボードレイアウト、CAPS LOCKがオンである、クリップボードからテキストを貼り付けるなどの)考慮していません。

  1. は、あなたがテキストボックスにアタッチ動作を作成します。

    は、私がこれを適切に行うための二つの方法を参照してください。その動作は現在のテキストを追跡し、TextChangedイベントに登録します。イベントが発生するたびに、その動作はテキストが有効であることを保証し、そうでなければ、最後に確認した有効な値にテキストを戻します。

  2. OnTextInput()メソッドをオーバーライドするTextBoxのサブクラスを作成します。ここでは、何らかのチェックをすることができます。入力されたテキストが好きでない場合は(e.Text)、e.Handled = trueと入力すると入力が無視されます。

0

は、あなたがそのようにそれを行うことができます(すべてのコードはSiverlightのKeyDownイベントである):例LOTSがあるので

if ((e.Modifiers == Keys.Shift) && (e.KeyCode == Keys.OemMinus)) 
{ 
    // Do Something 
} 
+0

これはif文がこれを好むでしょうか if((Keyboard.Modifiers == ModifierKeys.Shift)&& ..... Keys.OemMinusとは何ですか?私はKeyDownイベントでこれをすべて行っています – Waheed

+0

@Waheed:修飾子キーはKeyEventArgsで提供され、 "OemMinus"はOEMキー " - "を意味し、左のマイナス/アンダースコアキーを押すと送信されます – Fischermaen

+0

これは、シフト+マイナスを押すとアンダースコアに達すると仮定していますが、すべてのキーボードレイアウトで使用されるわけではありません。 –

関連する問題