是不是list中有两个string。。并且第二个string为空

解决方案 »

  1.   

    用正则还方便些        private void button1_Click(object sender, EventArgs e)
            {
                axMSComm1.PortOpen = true;
                string[] list = this.textBox1.Lines;
                foreach (string s in list)
                {
                    MatchCollection ms = Regex.Matches(s, @"(\d+\.{0,1}\d+)");
                    this.textBox2.Text = ms[0].Groups[1].Value;
                    this.textBox3.Text = ms[1].Groups[1].Value;
                }
            } 
      

  2.   

    加断点  调试  string[] list = this.textBox1.Lines;
      

  3.   

    断点跟一下不就得了
    textBox1里有东西?
    axMSComm1.PortOpen = true;
    你在按钮里打开了串口,然后读串口的代码又在哪呢?
    不是应该先把串口里的数据放textbox1里,然后再往2和3分么
    你这还没读到数据就开始分,能分出来才怪.
      

  4.   


    我已经数据到textBox1了 
    private void button1_Click(object sender, EventArgs e)
            {
                axMSComm1.PortOpen = true;
                string[] list = this.textBox1.Lines;
                foreach (string s in list)
                    if (s.Length == 20 && s.Substring(0, 1) == "$" && s.Substring(s.Length - 1, 1) == "F")
                    {
                        string a = s.Substring(6,3);
                        string b = s.Substring(10,5);
                        textBox2.Text = b.ToString();
                        textBox3.Text = a.ToString();
                    }
            }
      

  5.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace Mscomm
    {
        public partial class Form1 : Form
        {
            string data;
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                axMSComm1.RThreshold = 1;
                axMSComm1.CommPort = 8;
                axMSComm1.Settings = "115200,n,8,1";
                axMSComm1.InputMode = 0;
                
            }        private void axMSComm1_OnComm(object sender, EventArgs e)
            {
                
                data = axMSComm1.Input.ToString();
                textBox1.Text = textBox1.Text + data;        }
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                axMSComm1.PortOpen = false;
            }
            private void button2_Click(object sender, EventArgs e)
            {
                Close();
            }        private void button1_Click(object sender, EventArgs e)
            {
                axMSComm1.PortOpen = true;
                string[] list = this.textBox1.Lines;
                foreach (string s in list)
                    if (s.Length == 20 && s.Substring(0, 1) == "$" && s.Substring(s.Length - 1, 1) == "F")
                    {
                        string a = s.Substring(6,3);
                        string b = s.Substring(10,5);
                        textBox2.Text = b.ToString();
                        textBox3.Text = a.ToString();
                    }
            }
           
        }
        
    }
      

  6.   

    private void axMSComm1_OnComm(object sender, EventArgs e)
            {
                
                data = axMSComm1.Input.ToString();
                textBox1.Text = textBox1.Text + data;        }
    你在串口的回调函数里给textbox1赋值,而在打开串口的地方给2,3赋值,刚打开串口的时候,数据还没有上来,当然2,3就是空的.
    你把给2,3也写到这里,就好了.
      

  7.   

    axMSComm1_OnComm这个是事件函数,响应的是串口接到数据的事件,每接到一个字符串,就执行一次
    而button1_Click,这是按钮事件,按钮每按下一次,就执行一次.你应该是每次接到数据,就给1,2,3分别赋值,而不是每次都去更新1,而2和3只执行一次,懂我的意思么
      

  8.   

    或者你再给textbox1注册个textchanged事件,每次内容变化,就执行一次,然后用里面的数据去更新2和3