C#Winforms键。右键显示等于单引号?

C#Winforms键。右键显示等于单引号?,c#,winforms,C#,Winforms,我试图阻止用户在按键事件中键入单引号。看起来很简单。我要做的就是使用KeyChar。当我转换为char并与Keys.Right(右箭头)进行比较时,出于某种奇怪的原因,单个引号是匹配的。我对此感到困惑。你知道为什么一个单引号可以匹配一个右箭头吗?我所看到的所有示例都只进行相同的转换,以与键进行比较 Func<char, bool> IsEditingKey = k => { if (k == (char)Keys.Left

我试图阻止用户在按键事件中键入单引号。看起来很简单。我要做的就是使用KeyChar。当我转换为char并与Keys.Right(右箭头)进行比较时,出于某种奇怪的原因,单个引号是匹配的。我对此感到困惑。你知道为什么一个单引号可以匹配一个右箭头吗?我所看到的所有示例都只进行相同的转换,以与键进行比较

Func<char, bool> IsEditingKey = k =>
            {
                if (k == (char)Keys.Left || k == (char)Keys.Right || k == (char)Keys.Delete || k == (char)Keys.Back)
                {
                    return true;
                }

               return false;
           };
Func IsEditingKey=k=>
{
如果(k==(char)Keys.Left | | k==(char)Keys.Right | | k==(char)Keys.Delete | | k==(char)Keys.Back)
{
返回true;
}
返回false;
};

如果我传入一个引号('),当k==(char)Keys.Right的测试发生时,它返回true。现在我想这可能是一个cast问题,但我如何进行比较以确保它确实是正确的箭头而不是单引号(')?

使用此选项将
键转换为
字符:

KeysConverter kc = new KeysConverter();
char c = Convert.ToChar(kc.ConvertToString(Keys.Left))));

使用此选项可将
转换为
字符

KeysConverter kc = new KeysConverter();
char c = Convert.ToChar(kc.ConvertToString(Keys.Left))));

请尝试KeyDown事件,而不是KeyPress事件。它使用KeyEventArgs,这是您正在寻找的

textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);

void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Right)
      {
        //Do Something
      }
    }

请尝试KeyDown事件,而不是KeyPress事件。它使用KeyEventArgs,这是您正在寻找的

textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);

void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Right)
      {
        //Do Something
      }
    }

您正在将字符与虚拟键混合。不一样。右键的值为0x27<代码>'\'
也是0x27。一个是枚举,另一个是char


您需要使用适当的事件来区分这两者。KeyDown事件为您提供虚拟密钥。KeyPress事件为您提供键入字符,该字符是在用户首选键盘布局转换虚拟键后生成的。由于您只对角色感兴趣,而对虚拟键不感兴趣,因此必须使用KeyPress。设置e.Handled=true以抑制它。

您将字符与虚拟键混淆。不一样。右键的值为0x27<代码>'\'
也是0x27。一个是枚举,另一个是char


您需要使用适当的事件来区分这两者。KeyDown事件为您提供虚拟密钥。KeyPress事件为您提供键入字符,该字符是在用户首选键盘布局转换虚拟键后生成的。由于您只对角色感兴趣,而对虚拟键不感兴趣,因此必须使用KeyPress。设置e.Handled=true以抑制它。

谢谢!是的,我最初尝试了keydown,但我使用的基础设施控件存在一些bug,e.handled=true无法抑制它。由于某种原因,当我在按键事件上执行此操作时,它会工作。这是因为e.HandleforKeyDown不会抑制按键。e.SuppressKeyPress属性有。谢谢!是的,我最初尝试了keydown,但我使用的基础设施控件存在一些bug,e.handled=true无法抑制它。由于某种原因,当我在按键事件上执行此操作时,它会工作。这是因为e.HandleforKeyDown不会抑制按键。e.SuppressKeyPress属性没有。我使用的infragstics控件有一个错误,这就是我没有使用KeyDown的原因。出于某种原因,在按键中将Handle设置为true会抑制它,但在keydown中不会抑制它(这应该可以工作,但不会)。我使用的infragstics控件存在一个错误,这就是我没有使用keydown的原因。由于某些原因,在按键中将handled设置为true会抑制它,但在keydown中不会抑制它(这应该可以工作,但不会)。谢谢!我要试试看。:)KeyConverter仅适用于在快捷键敲击的菜单中生成帮助字符串。谢谢!我要试试看。:)KeyConverter仅适用于在快捷键敲击的菜单中生成帮助字符串。