2017-11-15 7 views
0

UWPのKeyDownEventでバックスペースキーをキャンセルする方法はありますか?このイベントではKeyRoutedEventArgsが使用されているため、SuppressKeyPress機能はありません。UWP KeyRoutedEventArgs.handledがバックスペースキーをキャンセルしない

event.Handled = trueは役に立ちません。同じキー・プレスからイベントが複数回連続して呼び出されるのを止めるだけです。

このような機能はありますか?

+0

e.Handled =、あなたがのための完全なコードを投稿してくださいすることができ、他に何か問題を引き起こして動作するはず真がなければなりませんさらに助けてください –

答えて

4

あなたは次のように定義されたテキストボックスがある場合:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <TextBox KeyDown="TextBox_KeyDown"/> 
</Grid> 

そして、あなたはちょうど真=取扱たびに設定した場合、KeyDownイベントイベントで、ユーザーは何も入力することはできません。

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     e.Handled = true; 
    } 

をしかし、あなたが言及したように、あなたがBack-keyをチェックし、Handled = trueを設定すると、それは動作しません:ユーザーはまだバックスペースを使用することができます。これはうまくいきません。

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     if (e.Key == Windows.System.VirtualKey.Back) 
     { 
      e.Handled = true; 
      return; 
     } 
    } 

コードをデバッグすると、イベントハンドラが実行されたときに文字が既に消えていることがわかります。他のイベントを使用して、この問題を回避する必要があります。ここでは一つの選択肢だ:

XAML:

<TextBox KeyDown="TextBox_KeyDown" KeyUp="TextBox_KeyUp"/> 

コードの背後にある:

private string currentText; 
    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     if (e.Key == Windows.System.VirtualKey.Back) 
     { 
      if (string.IsNullOrWhiteSpace(currentText)) 
       return; 

      ((TextBox)sender).Text = currentText; 
      ((TextBox)sender).SelectionStart = currentText.Length; 
      ((TextBox)sender).SelectionLength = 0; 
     } 
    } 

    private void TextBox_KeyUp(object sender, KeyRoutedEventArgs e) 
    { 
     currentText = ((TextBox)sender).Text; 
    } 
+0

それはうまくいきました。ありがとう。しかし、カーソル位置を保存する方法はありますか?私は、 'currentText'を設定する方法に似た、選択変更された関数と新しい変数を追加しようとしましたが、いつも戻ってきました。 – Orion31

関連する問題