C# 复合阅读和填充

C# 复合阅读和填充,c#,serial-port,barcode,padleft,C#,Serial Port,Barcode,Padleft,大家好。我希望有人能帮助我解决两个我不理解的问题 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

大家好。我希望有人能帮助我解决两个我不理解的问题

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位,这是为什么?

我在一段代码中尝试了你的字符串,结果都成功了

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

在玩了很多次之后,我发现在我的文本框中有一个看不见的字符

textBox1.Text = textBox1.Text.Trim();
这消除了不可见字符,允许填充正确工作,然后我将我的data received事件更改为在计时器上,以避免像这样的跨线程问题

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();

    }

我的程序正在按我需要的方式运行。感谢用户2019047的帮助

“碎裂”我不太清楚。请举例说明您的问题。对于Text.PadLeft,数字13表示生成字符串的总长度,因此如果字符串的长度为10,则填充字符串的长度将为13,即000ssss。如果字符串的长度大于13,则不会出现填充。我给出了一个数据字符串的示例。字符串数据返回S08A079340688721我需要它返回07934068721,因此我尝试使用我在示例中显示的子字符串,它返回正确数量的执行选项,它首先返回空白,然后返回字符串的其余部分。因为它首先返回一个空白,所以我的文本框不会填充。长度也不超过13这是它的作用让我们假设文本框=07934068721在填充后看起来像这007934068711,总共是12位去掉原始的0,看起来像这0007934068711,总共13位只是一个注释,在回答评论时,用@,这样,用户在登录时会收到一条消息,说明前面的评论有答案。我试过你的代码,效果很好。如果您得到不同的结果,可能会提供有关您的环境(编译器、版本等)的更多信息。为什么使用appendtext而不是textbox1.Text=???当扫描条形码时,字符串来自扫描仪刻度中的数据,如果我不使用append,它不会显示整个缓冲区,我猜是正确的单词,然后获取该字符串数据,我尝试对其进行子串,并使textbox=指向它,但什么都不显示,所以我把字符串放在一个消息框中,我首先得到一个空白消息框,然后在关闭它之后,我在第二个消息框中得到相应的字符串,不知道为什么会这样。此外,我可能会尝试填充我的数据字符串,正如您所示,我一直在填充txtbox,我使用的是visual studio 2012,这可能是一个错误,因为它没有正确填充。如果我理解正确,请将子字符串附加到文本框中,然后尝试填充它。您必须先填充子字符串,然后将其附加到文本框中的任何文本中(如果文本框中有任何文本)。好的,我会尝试一下,为什么在获得实际数据之前,我在子字符串后得到一个空白?@quatre432您必须编辑上面的代码,以准确指示问题发生的位置。在每行代码中,以注释的形式指出您正在使用的变量中的值,这也包括文本框文本。您可以通过在调试器中单步执行代码并记下每个变量的每个值(将其写在纸上)来回答上述问题。如果你仍然不理解你的错误,把结果贴在这里,我会尽力帮助你。回答海报时,请使用@正如我在本文开头所做的那样。@这是我上面的代码。基本上,我扫描了一个条形码,然后打开该条形码并将其捕获到字符串数据中。附加到文本框,只要我不尝试子字符串数据,这就可以工作,tommrow我将尝试填充数据1,看到我得到的第一个响应是13 0,或者如果它仍然为空,并且每次我执行@your name时它都会消失