TextBoxのKeyDownイベントでEnterを押したときに2回実行される

TextBoxのKeyDownイベントでe.Key==VirtualKey.Enterのときに処理を行うと2回実行される。
e.KeyStatus.RepeatCountの値を見て回避。
確認したのはWindowsストアアプリ。

// using
using Windows.System;// VirtualKey
using Windows.UI.Xaml.Input;// KeyRoutedEventArgs
using System.Diagnostics;// Debug
 
// TextBoxのKeyDownイベント
private void textBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
  Debug.WriteLine(e.Key + ":" + e.KeyStatus.RepeatCount);// 確認用 
  switch (e.Key)
  {
    case VirtualKey.Enter:
      if (e.KeyStatus.RepeatCount == 1)// Enterのときは0と1の2回
      {
        // Enterが押されたときに実行したい処理
      }
      break;
  }
}

【KeyDown】
Enterのときに0と1、Tabはフォーカスが他へ移るときに0だけ、他のキーは1だけ。
カーソルキーがテキスト内の移動中に取得できない。
【KeyUp】
Enterのときに1だけ、Tabは他からフォーカスが移ってくるときに1だけ、他のキーは1だけ。
e.Keyに名前が定義されてないキーもいくつかあった。
242:CapsLockオン、243:半角→全角、244:全角→半角。

細かい挙動書いてあるサイトあったりするのかな。

【参考】
C# textbox keydown triggered twice in metro applications(英語)


カテゴリー: Windows ストア アプリ パーマリンク