仅允许忽略的字符中的“Shift + _”

时间:2011-12-20 11:28:06

标签: c# silverlight c#-4.0

我正在使用此代码来阻止文本框中的某些键。

private void tb_MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
    // Handle Shift case
    if (Keyboard.Modifiers == ModifierKeys.Shift)
        e.Handled = true;

    // Handle all other cases
    if (!e.Handled && (e.Key < Key.D0 || e.Key > Key.Z))
    {
        if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9)
        {
            if (e.Key != Key.Back)
                e.Handled = true;
        }
    }
}

此代码会阻止除A到Z以及0到9之外的所有键。但是我还想允许你通过Shift + _获得_。

如何只为Shift + _ ????? (所有代码都在Siverlight的KeyDown事件上)

2 个答案:

答案 0 :(得分:2)

我不喜欢检查KeyPress args的想法,因为有很多案例没有考虑(例如备用键盘布局,CAPS LOCK正在打开,或者从剪贴板粘贴文本)。

我认为有两种方法可以做到这一点:

  1. 创建附加到TextBox的行为。该行为将跟踪当前文本,并订阅TextChanged事件。每当事件触发时,行为都会确保文本有效,如果没有,只需将文本设置回它看到的最后一个有效值。

  2. 创建TextBox的子类,在其中覆盖OnTextInput()方法。在这里你可以做任何你想要的检查,如果你不喜欢输入的文本(e.Text),只需设置e.Handled = true,输入就会被忽略。

答案 1 :(得分:0)

你可以这样做:

if ((e.Modifiers == Keys.Shift) && (e.KeyCode == Keys.OemMinus))
{
    // Do Something
}