将KeyPress输入存储为字符串

时间:2018-03-13 16:45:48

标签: c# keypress

我正在扫描从条形码到表单的值,但它没有输入到文本框中。我想从KeyPress返回的值“构建”一个字符串,以便我可以稍后解析条形码。我不知道如何设置一个循环来捕获条形码中的所有字符。

private string input;
private void MESMenu_KeyPress(object sender, KeyPressEventArgs e)
{
    input += e.KeyChar;
    MessageBox.Show(input);
}

1 个答案:

答案 0 :(得分:0)

按键看起来像是一个事件。一方面有一个循环 - 事件队列。另一方面,没有可以直接使用的循环(因为你没有计算变量)。

有一些解决方法,但它们都有同样的问题:你需要弄清楚一个条形码何时完成"并且可以处理。因此下一个可以开始。或者当条形码的输入失败时(可能由于某些数字不可读),因此应该重复。

除此之外,你走在正确的轨道上:你需要在你追加的事件之外的变量。这可以是字符串,List,List(很多单个字符串)或Stringbuilder。

对于短案,字符串通常足够好。如果你做了很多任务,那么字符串连接会有一些开销。它来自字符串的Inmubtability以及字符串实习等功能以节省内存。为了解决这些优化/问题,增加了StringBuilder。

你应该避免的一件事是使用任何GUI元素作为外部变量。编写GUI会导致相当大的开销。如果您按用户触发的事件执行一次,则不会出现问题。但是从任何一种循环中,效果都可能是巨大的:

using System;
using System.Windows.Forms;

namespace UIWriteOverhead
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int[] getNumbers(int upperLimit)
        {
            int[] ReturnValue = new int[upperLimit];

            for (int i = 0; i < ReturnValue.Length; i++)
                ReturnValue[i] = i;

            return ReturnValue;
        }

        void printWithBuffer(int[] Values)
        {
            textBox1.Text = "";
            string buffer = "";

            foreach (int Number in Values)
                buffer += Number.ToString() + Environment.NewLine;
            textBox1.Text = buffer;
        }

        void printDirectly(int[] Values){
            textBox1.Text = "";

            foreach (int Number in Values)
                textBox1.Text += Number.ToString() + Environment.NewLine;
        }

        private void btnPrintBuffer_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Generating Numbers");
            int[] temp = getNumbers(10000);
            MessageBox.Show("Printing with buffer");
            printWithBuffer(temp);
            MessageBox.Show("Printing done");
        }

        private void btnPrintDirect_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Generating Numbers");
            int[] temp = getNumbers(1000);
            MessageBox.Show("Printing directly");
            printDirectly(temp);
            MessageBox.Show("Printing done");
        }
    }
}