如何检测在文本框的c #keydown事件中输入的多个键?

时间:2011-10-31 07:00:06

标签: c# silverlight keyboard

我想在silverlight中设计数字文本框

我已将TextBox的 keydown事件添加到处理按键

内部事件我验证在文本框中输入的密钥。

事件如下

  private void TextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (!this.Validate(sender,e))
            e.Handled = true;
    }

功能验证如下

  private bool Validate(object sender, KeyEventArgs e)
    {

        if (e.Key == Key.Enter) //accept enter and tab
        {
            return true;
        }
        if (e.Key == Key.Tab)
        {
            return true;
        }

        if (e.Key < Key.D0 || e.Key > Key.D9) //accept number on alphnumeric key
            if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9) //accept number fomr NumPad
                if (e.Key != Key.Back) //accept backspace
                    return false;

        return true;
    }

我无法检测到shift和Key.D0到Key.D1,即

SHIFT + 1 ,返回“

SHIFT + 3 会像任何其他特殊键一样返回“”。

我不希望用户在文本框中输入特殊字符。

我如何处理此键事件?

3 个答案:

答案 0 :(得分:6)

在Silverlight中,我认为Modifier课程中没有KeyEventArgs,而是Keyboard

    public void KeyDown(KeyEventArgs e)
    {
        if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.D0)
        {
            ControlZero();
        }
    }

答案 1 :(得分:0)

e应该有一个属性,告诉您是否按下了Shift,Control或Alt。 e.Modifiers还可以为您提供有关已按下其他修改键的其他信息。

要取消字符,您可以将e.Handled设置为True,这会导致控件忽略按键。

答案 2 :(得分:0)

textBox2.Text = string.Empty;
textBox2.Text = e.Modifiers.ToString() + " + " + e.KeyCode.ToString();