大家好。我希望有人可以帮助我解决我有两个我不理解的问题。
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// If the com port has been closed, do nothing
if (!comport.IsOpen) return;
// This method will be called when there is data waiting in the port's buffer
// Determain which mode (string or binary) the user is in
// Read all the data waiting in the buffer
string data = comport.ReadExisting();
textBox1.AppendText(data);
textBox1.ScrollToCaret();
//scnbutton.PerformClick();
// Display the text to the user in the terminal
}
我正在处理条形码。当我的扫描仪扫描条形码时,它返回S08A07934068721。每次UPC为07934068721时返回此值,这是我希望附加到文本框的值。
string data1= data.Substring(4);
textBox1.AppendText(data1);
这是尝试使用子字符串的示例。
每当我尝试对字符串数据进行子字符串处理时,它最终都会分成碎片,我不知道如何阻止它。在我修复后,我将遇到下面代码的问题
textBox1.Text = textBox1.Text.PadLeft(13, '0');
这很好用,总是填上13位数。但是当UPC或类型的东西在前面有0时它会下降到12位数,为什么会这样?
答案 0 :(得分:0)
我在一段代码中尝试了你的字符串,一切正常。
string data = "S08A07934068721"; // results
string data1 = data.Substring(4); // 07934068721
// test if padding correctly
string padded = data1.PadLeft(13, '0'); // 0007934068721
// textbox tbPadded is empty before adding text
tbPadded.AppendText(data1); // 07934068721
// pad text
tbPadded.Text = tbPadded.Text.PadLeft(13, '0'); // 0007934068721
答案 1 :(得分:0)
经过多次游戏,我发现那里的文本框中有隐形字符,所以使用
textBox1.Text = textBox1.Text.Trim();
这摆脱了不可见的字符,允许填充正常工作,然后我将我的数据接收事件更改为计时器,以避免像这样的跨线程问题
private void timer3_Tick(object sender, EventArgs e)
{
data = comport.ReadExisting();
try
{
if (data != "")
{
textBox1.Clear();
textBox1.AppendText(data);
timer3.Stop();
scan();
timer3.Start();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
comport.DiscardInBuffer();
}
我的程序现在正在按照我的需要工作。感谢user2019047的帮助