首页 > 解决方案 > 为什么有时在 RichTextBox 中按 Alt+X 会将字符切换为 unicode/hex?

问题描述

在常规 RichTextBox(我尝试了几个 .NET Framework 目标)中按Alt+X可以将文本替换为 unicode/hex 字符。

重现
- 启动一个常规的 .NET Winforms 项目。
- 在表单上放置一个 RichTextBox - 在 RichTextBox 中
构建 > 键入1234,然后按Alt+X
- 你应该看到文本现在变成了一个 unicode 字符(有点像头盔)。
- 根据最后几组字符,产生的变化可能不同,或者根本不发生。
- 另一个例子 - 键入ssss然后按 Alt+X,最后一个 s 将切换到 73。

我们在尝试访问具有 X (E&xit) 热键的工具条按钮时发现了这一点,该按钮在完成将文本输入到 RichTextBox 后。

我试过的:
- 几种字体
- 将 ShortCutsEnabled 属性设置为 false

我的暂定解决方案是使用 KeyPress 事件,如果他们按下 Alt 和 X,请将 e.Handled 设置为 true。不过有点hack。

任何人都有更好的想法或答案来解释为什么会这样?:)

标签: c#winforms

解决方案


正如汉斯所说,这是预期的行为。如果您希望禁用此功能,您可以覆盖 KeyDown 并将此特定事件标记为已处理。

请注意,击键将单独出现,因此维护状态有点棘手——这样的事情应该可以工作:

bool AltKeyPressed = false;
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
  if (AltKeyPressed)
  {
    AltKeyPressed = false;
    if (e.SystemKey == Key.X) {
        e.SuppressKeyPress = true;
        e.Handled = true;
    }
   }

  if (e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt)
  {
    AltKeyPressed = true;
  }
}

推荐阅读