3

我在窗口上使用 PreviewKeyDown 事件来接收来自条形码扫描仪的所有键。KeyEventArgs 是一个枚举,并没有给我实际的字符串。我不想使用 TextInput,因为某些键可能由控件本身处理,并且可能不会冒泡到 TextInput 事件。

我正在寻找一种将我在 PreviewKeyDown 中获得的键转换为实际字符串的方法。我查看了 InputManager、TextCompositionManager 等,但我没有找到一种方法来提供键列表并返回一个字符串。TextCompositionManager 或其他东西必须将这些键转换为文本输入中可用的字符串。

4

2 回答 2

2

这是我正在使用的事件。KeyDown 获取键,PreviewTextInput 获取实际文本。因此,键之间的某处正在转换为文本。

 public Window1()
            {
                InitializeComponent();
                TextCompositionManager.AddPreviewTextInputStartHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput));
                this.AddHandler(Window.KeyDownEvent, new System.Windows.Input.KeyEventHandler(Window_KeyDown), true);
            }

    private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
            {
            }

    private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
            {
            }
于 2009-10-01T18:18:42.520 回答
1

Key -> Text 转换比您想象的要复杂得多,实际上没有办法将单个按键映射到单个字符,因为在某些语言和某些情况下,您需要多次按键来组成单个字符。

由于您对来自条形码扫描仪的输入感兴趣(我假设它只会生成窗口可以处理的一小部分,可能只有 ASCII 甚至可能更少)您可以自己构建转换表并将其硬编码到您的程序中 - 它很多然后更容易处理 Windows 文本处理所做的所有疯狂行为(为了好玩,查找“死键”)。

于 2009-10-05T10:52:59.570 回答