Comport Reading和Padding

时间:2013-05-24 19:36:28

标签: 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 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位数,为什么会这样?

2 个答案:

答案 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的帮助