C# 如何禁用某些组合键(例如Shift和“x2B”某些数字键)

C# 如何禁用某些组合键(例如Shift和“x2B”某些数字键),c#,wpf,C#,Wpf,我创建了一个电话键盘,它由0-9加上散列键(#)和星形键(*)组成。我可以禁用除数字键以外的其他键,这样当用户在提供的文本框中键入时,它将只允许数字键。因为#是Shift+3的组合,*是Shift+8的组合,所以我的问题是除了这两个组合键外,我不能禁用其他组合键。那么,有没有办法处理这个问题以便只允许Shift+3和Shift+8 private void NumDisplayBox_PreviewKeyDown(object sender, KeyEventArgs e) { //De

我创建了一个电话键盘,它由0-9加上散列键(#)和星形键(*)组成。我可以禁用除数字键以外的其他键,这样当用户在提供的文本框中键入时,它将只允许数字键。因为#是Shift+3的组合,*是Shift+8的组合,所以我的问题是除了这两个组合键外,我不能禁用其他组合键。那么,有没有办法处理这个问题以便只允许Shift+3和Shift+8

private void NumDisplayBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    //Determine whether the keystroke is a number from the top of the keyboard
    if (e.Key < Key.D0 || e.Key > Key.D9)
        //Determine whether the keystroke is a number from the keypad
        if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9)
            e.Handled = true;

    if (e.Key == Key.Space) //Disable the space key
        e.Handled = true;

    //Enable the following keys
    if (e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Left || e.Key == Key.Right)
        e.Handled = false;

    //Determine whether the keystroke is # or *    
    if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.D3))
        e.Handled = false;
}
private void NumDisplayBox\u PreviewKeyDown(对象发送方,KeyEventArgs e)
{
//确定击键是否为键盘顶部的数字
如果(e.KeyKey.D9)
//确定击键是否为键盘上的数字
如果(e.KeyKey.NumPad9)
e、 已处理=正确;
if(e.Key==Key.Space)//禁用空格键
e、 已处理=正确;
//启用以下键
如果(e.Key==Key.Back | e.Key==Key.Delete | e.Key==Key.Left | e.Key==Key.Right)
e、 已处理=错误;
//确定击键是#还是*
if((Keyboard.Modifiers==ModifierKeys.Control)和&(e.Key==Key.D3))
e、 已处理=错误;
}

if((Keyboard.Modifiers==ModifierKeys.Shift)和&(e.Key==Key.D3 | | e.Key==Key.D8))e.Handled=false;Hi@Gusman,正如我所尝试的,它仍然给我相同的结果。如果(e.Shift&&(e.Key==Key.D3 | | e.Key==Key.D8))它仍然是一样的,我知道为什么它仍然是一样的,即使语句是正确的,因为我已经说过,如果e.Key是number Key,那么它会显示在文本框中。因为该语句首先执行,所以我在下面设置的与数字键相关的任何语句仍然无法得到我想要的。这是我的问题,我不知道如何解决。@YWah然后改变执行顺序。首先检查修改器关键点,然后相应地应用其余规则。此外,还有位字段枚举,因此确定所按下的精确修改键集的正确方法是使用位操作,例如
(Keyboard.Modifiers&ModifierKeys.Shift)=ModifierKeys.Shift
。顺便说一下。。。在您的示例中,最后一个条件,我不确定这是否是打字错误,但您检查了
Control
key而不是
Shift
key。