将KeyDown键转换为一个字符串C#

时间:2011-11-29 12:35:35

标签: c# .net wpf

我有磁卡读卡器,用户刷卡时模拟键盘输入。当我的WPF窗口是Focused时,我需要处理这个键盘输入到一个字符串。我可以得到这个键入的键列表,但我不知道如何将它们转换为一个字符串。

private void Window_KeyDown(object sender, KeyEventArgs e)
{
   list.Add(e.Key);
}

编辑:简单的.ToString()方法无济于事。我已经尝试过了。

5 个答案:

答案 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();
}