web-dev-qa-db-ja.com

TextBoxでEnterキーが押されたかどうかを判断する

Win Phone 7のXAML TextBoxを検討してください。

  <TextBox x:Name="UserNumber"   />

ここでの目標は、ユーザーがスクリーンキーボードのEnterボタンを押すと、ロジックを開始して画面のコンテンツを更新することです。

Enter専用のイベントを発生させたいのですが。これは可能ですか?

  • イベントはTextBoxに固有ですか、それともシステムキーボードイベントですか?
  • キーを押すたびにEnterのチェックが必要ですか?つまり、ASCII 13?
  • この要件をコーディングする最良の方法は何ですか?

alt text

40
p.campbell

テキストボックスでこれを行う簡単な方法は、

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        Debug.WriteLine("Enter");
    }
}
71
Mick N

そのテキストボックスに固有のKeyDownイベントを実装し、押された実際のキーについてKeyEventArgsを確認します(それがKey.Enterと一致する場合は、何かを行います)。

<TextBox Name="Box" InputScope="Text" KeyDown="Box_KeyDown"></TextBox>

private void Box_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key.Equals(Key.Enter))
    {
        //Do something
    }
}

WP7エミュレーターのベータ版では、ソフトウェアオンスクリーンキーボードを使用するとEnterキーが正しく検出されますが、ハードウェアキーボードを使用している場合(Pause/Breakを押すとアクティブになる)、Enterキーが表示されるようです。 Key.Unknownとして-または、少なくとも、私のコンピューターで実行していた...

13
Henry C

エミュレーターを使用している場合は、このようなことを行って、物理キーボードからEnterキーを検出することもできます。

    private void textBox1_KeyUp(object sender, KeyEventArgs e) {
        var isEnterKey =
            e.Key == System.Windows.Input.Key.Enter ||
            e.PlatformKeyCode == 10;

        if (isEnterKey) {
            // ...
        }
    }
6
SandRock

キーボードを無効にする

同じ問題に直面しました。上記の例では、キーボードプレスイベント(質問に答える)をトラップする方法の詳細のみを示していますが、キーボードを無効にするには、オンクリックまたはEnterキーを押すだけで、フォーカスを別のコントロールに設定できます。

これにより、キーボードが無効になります。

private void txtCodeText_KeyDown(object sender, KeyEventArgs e)
{
    if(e.Key.Equals(Key.Enter))
    {
        //setting the focus to different control
        btnTransmit.Focus();
    }
}
5
Saikrishnan