我正在使用此代码来阻止文本框中的某些键。
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事件上)
答案 0 :(得分:2)
我不喜欢检查KeyPress args的想法,因为有很多案例没有考虑(例如备用键盘布局,CAPS LOCK正在打开,或者从剪贴板粘贴文本)。
我认为有两种方法可以做到这一点:
创建附加到TextBox的行为。该行为将跟踪当前文本,并订阅TextChanged
事件。每当事件触发时,行为都会确保文本有效,如果没有,只需将文本设置回它看到的最后一个有效值。
创建TextBox的子类,在其中覆盖OnTextInput()
方法。在这里你可以做任何你想要的检查,如果你不喜欢输入的文本(e.Text
),只需设置e.Handled = true
,输入就会被忽略。
答案 1 :(得分:0)
你可以这样做:
if ((e.Modifiers == Keys.Shift) && (e.KeyCode == Keys.OemMinus))
{
// Do Something
}