C# 将按键输入存储为字符串
我正在扫描一个从条形码到表单的值,但它并没有被输入到文本框中。我想从KeyPress返回的值“构建”一个字符串,以便以后可以解析条形码。我不知道如何设置一个循环来捕获条形码中的所有字符C# 将按键输入存储为字符串,c#,keypress,C#,Keypress,我正在扫描一个从条形码到表单的值,但它并没有被输入到文本框中。我想从KeyPress返回的值“构建”一个字符串,以便以后可以解析条形码。我不知道如何设置一个循环来捕获条形码中的所有字符 private string input; private void MESMenu_KeyPress(object sender, KeyPressEventArgs e) { input += e.KeyChar; MessageBox.Show(input); } 按键看起来像一个事件。一
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
我刚刚找到了这条线……当然,在我创建这条线之前,我一直在搜索,之后就找到了!它还没有完全起作用,但我觉得我已经达到了目的。我已经解决了…使用此线程: