Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 只允许;班次+;\u&引用;从被忽视的角色_C#_Silverlight_C# 4.0 - Fatal编程技术网

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
    事件。每当触发事件时,该行为将确保文本有效,如果无效,只需将文本设置回它看到的最后一个有效值

  • 创建TextBox的子类,在其中重写
    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,…)