2009-09-29 73 views
2

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

我正在寻找一种方法将我在PreviewKeyDown中获得的Keys转换为实际的字符串。 我看着InputManager,TextCompositionManager等,但我没有找到一种方法,我给出的键列表,它返回一个字符串。 TextCompositionManager或其他东西必须将这些Keys转换为TextInput中可用的字符串。

+0

任何人有什么请吗? – RRR 2009-09-30 04:31:38

回答

1

这是我正在使用的事件。 KeyDown获取键值,PreviewTextInput获取实际文本。所以键之间的某个地方正在转换为文本。

​​
+0

.NET框架返回KeyUp/KeyDown事件上的原始扫描代码简直是“不可能”(就像“太令人震惊”)。那么我们该怎么办?改为使用'PreviewTextInput'事件。我们得到这个键的字符串表示形式,像这样:void KeyboardNavigation(object sender,TextCompositionEventArgs e){string typedChar = e.Text; }' – 2010-09-25 21:39:15

-3

好的,从this post被盗。

[DllImport("user32.dll")] 
static extern short VkKeyScan(char ch); 

static public Key ResolveKey(char charToResolve) 
{  
    return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve)); 
} 
+0

e因为PreviewKeyDownEventArgs给出编译错误。 KeyEventArgs不能转换为PreviewKeyDownEventArgs – RRR 2009-09-30 14:54:53

+0

我想在这里帮助你,但你需要给我更多的信息。你可以添加事件定义,或者通过MSDN链接到这个问题? – Gregory 2009-09-30 23:14:59

+0

我不能发表评论中的所有内容。所以我把它发布在下面的答案中。 – RRR 2009-10-01 18:19:25

1

键 - >文本转换比你想象的要复杂得多,实际上是没有办法单次击键映射到单个字符,因为某些语言中,有些情况下,你需要多按键组成单字符。

由于您对条形码扫描仪的输入感兴趣(我认为它只会生成windows可以处理的一小部分,可能只有ASCII可能更少),您可以自己构建转换表并将其硬编码到您的程序 - 处理Windows文本处理的所有疯狂(为了好玩,查找“死钥匙”)要容易得多。