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(英語)