c# - 为什么有时在 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。
任何人都有更好的想法或答案来解释为什么会这样?:)
解决方案
正如汉斯所说,这是预期的行为。如果您希望禁用此功能,您可以覆盖 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;
}
}
推荐阅读
- excel - 用第一个重复行中的最后一个重复替换第一个重复 – Excel VBA
- javascript - 使用 await 和 setTimerout 减慢 for 循环
- android - initPublisher 创建发布者对象但不初始化相机
- java - 如何在 XML 报告中显示 Gauge 消息?
- python - uWSGI 和 joblib Semaphore:Joblib 将以串行模式运行
- python - Python Tkinter:如何为椭圆形物体留下痕迹
- c++ - 在 QML 场景中显示内存中的网格
- c++ - 当没有更多工作要做时,防止 boost::asio::io_context 返回
- angular - 用于修剪空间的角度自定义指令有效,但验证失败
- python-3.x - 如何在python中继续返回false?