我有磁卡读卡器,用户刷卡时模拟键盘输入。当我的WPF窗口是Focused时,我需要处理这个键盘输入到一个字符串。我可以得到这个键入的键列表,但我不知道如何将它们转换为一个字符串。
private void Window_KeyDown(object sender, KeyEventArgs e)
{
list.Add(e.Key);
}
编辑:简单的.ToString()方法无济于事。我已经尝试过了。
答案 0 :(得分:5)
而不是添加到列表中,为什么不建立字符串:
private string input;
private bool shiftPressed;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
{
shiftPressed = true;
}
else
{
if (e.Key >= Key.D0 && e.Key <= Key.D9)
{
// Number keys pressed so need to so special processing
// also check if shift pressed
}
else
{
input += e.Key.ToString();
}
}
}
private void Window_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
{
shiftPressed = false;
}
}
显然,当您开始下一笔交易时,您需要将input
重置为string.Empty
。
答案 1 :(得分:1)
......或者你可以试试这个:
string stringResult = "";
list.ForEach(x=>stringResult+=x.ToString());
编辑: 经过Timur的好评,我决定建议:
您可以将keyPress事件用于以下所有内容:
string stringResult = "";
private void Window_KeyPress(object sender, KeyPressEventArgs e)
{
stringResult += e.KeyChar;
}
答案 2 :(得分:0)
您可以拥有一个StringBuilder的成员变量。
类似
class A
{
StringBuilder _contents = new StringBuilder();
private void Window_KeyDown(object sender, KeyEventArgs e)
{
_contents.Append(e.Key.ToString());
}
}
每次刷卡时都必须创建一个新的StringBuilder然后获取你将使用的字符串_contents.ToString();
答案 3 :(得分:0)
改为监听PreviewTextInput事件... TextCompositionEventArgs具有一个名为“ Text”的属性,该属性为您提供键的文本表示形式 例如Key.D2将只是“ 2” ...我认为它将 达到目的
private void MainWindow_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
list.Add(e.Text);
}
答案 4 :(得分:-1)
String combined = String.Empty;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
combined = combined + e.Key.ToString();
}