C# 只允许;班次+;\u&引用;从被忽视的角色
我正在使用此代码阻止文本框中的一些键C# 只允许;班次+;\u&引用;从被忽视的角色,c#,silverlight,c#-4.0,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
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;
}
}
}
private void tb\u MyTextBox\u KeyDown(对象发送方,KeyEventArgs e)
{
//手柄变速箱
if(Keyboard.Modifiers==ModifierKeys.Shift)
e、 已处理=正确;
//处理所有其他案件
如果(!e.Handled&(e.KeyKey.Z))
{
如果(e.KeyKey.NumPad9)
{
if(e.Key!=Key.Back)
e、 已处理=正确;
}
}
}
此代码阻止除A到Z和0到9之外的所有键。但我还想允许通过Shift+得到的
如何仅对Shift+执行此操作?????
(所有代码都在Siverlight的按键事件上)您可以这样做:
if ((e.Modifiers == Keys.Shift) && (e.KeyCode == Keys.OemMinus))
{
// Do Something
}
我不喜欢检查按键参数的想法,因为有很多情况它都没有考虑(例如,备用键盘布局、大写锁定或从剪贴板粘贴文本) 我认为有两种方法可以做到这一点:
TextChanged
事件。每当触发事件时,该行为将确保文本有效,如果无效,只需将文本设置回它看到的最后一个有效值OnTextInput()
方法。在这里,您可以执行任何检查,如果您不喜欢输入的文本(e.text
),只需设置e.Handled=true
,输入将被忽略silverlight和asp.net有不同的实现方法。我正在使用silverlight。“这条路怎么走?”丹尼尔A。怀特:是的,应该把它移走。正确。这个if语句是否与if类似((Keyboard.Modifiers==ModifierKeys.Shift)&&&…什么是键。OemMinus???我在KeyDown事件上都这么做。@Waheed:如果你把这个语句放在KeyDown事件中,它会像你期望的那样工作。修改键随KeyEventArgs一起提供,
OemMinus
表示OEM键“-”;当您按从左到右的shift键的减号/下划线键或按数字块上的减号键时,会发送此消息。这是假设按shift+减号可以到达下划线。这不适用于所有键盘布局。@Erno:如果在我的键盘上测试过它(Microsoft Natural Humanogy keyboard 4000 v.1.0)它发送了一个从左到右的Shift键加上减号/下划线键的组合,以及数字块的Shift加上减号键的组合。@Fischermaen-我指的不是键盘品牌,而是不同的布局(QWERTY,AZERTY,…)