Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将按键输入存储为字符串_C#_Keypress - Fatal编程技术网

C# 将按键输入存储为字符串

C# 将按键输入存储为字符串,c#,keypress,C#,Keypress,我正在扫描一个从条形码到表单的值,但它并没有被输入到文本框中。我想从KeyPress返回的值“构建”一个字符串,以便以后可以解析条形码。我不知道如何设置一个循环来捕获条形码中的所有字符 private string input; private void MESMenu_KeyPress(object sender, KeyPressEventArgs e) { input += e.KeyChar; MessageBox.Show(input); } 按键看起来像一个事件。一

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

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

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

有一些解决方法,但它们都有相同的问题:您需要确定一个条形码何时“完成”并可以处理。这样,下一个就可以开始了。或者条形码输入失败(可能是由于某些数字不可读),因此应重复输入

除此之外,您的思路是正确的:您需要在附加到的事件之外添加一个变量。这可以是字符串、列表、列表(许多单个字符串)或Stringbuilder

字符串对于短小的情况通常是足够好的。如果你做了大量的作业,字符串操作会有一点开销。它来自于字符串的不可复制性,以及诸如字符串插入这样的功能可以节省内存的事实。为了避免这些优化/问题,添加了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");
        }
    }
}
使用系统;
使用System.Windows.Forms;
命名空间UIWriteOverhead
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
int[]getNumbers(int上限)
{
int[]ReturnValue=新int[上限];
for(int i=0;i
我刚刚找到了这条线……当然,在我创建这条线之前,我一直在搜索,之后就找到了!它还没有完全起作用,但我觉得我已经达到了目的。我已经解决了…使用此线程: