沐弥润玉 2022-03-05 16:27 采纳率: 0%
浏览 1075
已结题

C# 请问如何提取textBox 中数据,并同步到按键textBox1

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;

using System.IO.Ports;
namespace SerialCommunicate
{
public partial class Form1 : Form
{
public string Receive_buff { get; private set; }
public int cnt { get; private set; }
public Form1()
{
InitializeComponent();
}
private DateTime current_time = new DateTime(); //为了避免在接收处理函数中反复调用,依然声明为一个全局变量
private StringBuilder sb = new StringBuilder();//为了避免在接收处理函数中反复调用,依然声明为一个全局变量

    private void Form1_Load(object sender, EventArgs e)
    {
        //设置默认值
        comboBox1.Text = "115200";   //波特率
        comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
        serialPort1.BaudRate = 115200;
        serialPort1.Parity = Parity.None;
        serialPort1.StopBits = StopBits.One;
        serialPort1.DataBits = 8;
        serialPort1.Handshake = Handshake.None;
        serialPort1.Close();
    }



    private void button1_Click(object sender, EventArgs e)    //打开关闭串口按钮
    {
        try
        {  //将可能产生异常的代码放置在try块中
            //根据当前串口属性来判断是否打开
            serialPort1.Encoding = System.Text.Encoding.GetEncoding("gb2312");
            if (serialPort1.IsOpen)
            {
                //串口已经处于打开状态
                serialPort1.Close(); //关闭串口

                button1.Text = "打开串口";
                button1.BackColor = Color.ForestGreen;
                comboBox1.Enabled = true;   //打开串口按钮可用
                comboBox2.Enabled = false;      //关闭串口按钮不可用               
            }
            else
            {
                //串口已经处于关闭状态,则设置好串口属性后打开
                comboBox1.Enabled = true;
                comboBox2.Enabled = true;
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
                serialPort1.Open();//打开串口
                button1.Text = "关闭串口";
                button1.BackColor = Color.Firebrick;

            }
        }
        catch
        {
            MessageBox.Show("端口打开失败", "错误");
        }
    }
    private void button2_Click(object sender, EventArgs e)       //清空接收区
    {
        textBox1.Text = "";
    }


    private void button3_Click(object sender, EventArgs e)         //检测发送按钮
    {
        int num = textBox2.Text.Length;
        string text = textBox2.Text;

        try
        {
            //首先判断串口是否开启
            if (serialPort1.IsOpen)
            {
                //串口处于开启状态,将发送区文本发送
                byte[] data = new byte[] { 0xaa, 0x55, 0x01, 0x00, 0xFB, 0xB1, 0x2F, 0x00, 0x10, 0x32, 0x03, 0x1D };
                serialPort1.Write(data, 0, data.Length);
               // SetAutoSizeMode();
            }
        }
        catch
        {
            MessageBox.Show("端口发送失败,系统将关闭当前串口", "错误");
            serialPort1.Close();
        }


        button6.Text = "检测中...";
        button6.BackColor = Color.Transparent;
        button7.Text = "        "; //窗口数据
    }

    private void button5_Click_1(object sender, EventArgs e)          //完成发送按钮
    {
        int num = textBox3.Text.Length;
        try
        {
            //首先判断串口是否开启
            if (serialPort1.IsOpen)
            {
                //串口处于开启状态,将发送区文本发送
                byte[] data = new byte[] { 0xaa, 0x55, 0x01, 0x00, 0xFB, 0xb1, 0x00, 0x10, 0x32, 0x02, 0xEE };//aa 55 01 00 FB b1 00 10 32 02 EE
                serialPort1.Write(data, 0, data.Length);
            }
        }
        catch
        {
            MessageBox.Show("端口发送失败,系统将关闭当前串口", "错误");
            serialPort1.Close();
        }


        if (serialPort1.IsOpen)
         {
          button6.Text = "通过";
          button7.Text = "2000/3000";
          button7.BackColor = Color.Transparent;
          }
          else
         {
            button6.Text = "不通过";
            button7.Text = "0/3000";
         }
    }


    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)//数据接收事件的方法
    {

        int sum = serialPort1.BytesToRead; //获取接收缓冲区中的字节数;
        byte[] received_buf = new byte[sum];//声明一个大小为num的字节数据用于存放读出的byte型数据 
        sb.Clear();        //防止出错,首先清空字符串构造器      
        str = serialPort1.ReadExisting();  // 读取串口数据

        //显示时间
        try
        {
            this.Invoke((EventHandler)(delegate
            {
                Receive_buff = serialPort1.ReadExisting(); //将串口1读取到的数据放在Receive_buff中    
                buffer.Append(Receive_buff);               //将分段的数据存放在一个字符串中,方便解析数据
                if (Receive_buff.Length > 0 && Receive_buff.IndexOf("****") != -1)//if (checkBox1.Checked)
                {
                    current_time = System.DateTime.Now; //获取当前时间
                    textBox1.AppendText(current_time.ToString("HH:mm:ss") + " " + str);     //sb.ToString()
                    textBox1.Text = (buffer.ToString());
                    string[] strs = buffer.ToString().Split("\r\n".ToCharArray());
                    for (int i = 0; i < strs.Length; i++)
                    {
                        buffer1.Clear();
                    }
                    buffer.Clear();
                }

                else
                {

                    textBox1.AppendText(str);
                    int DateTime_count = 0;
                    DateTime_count += sum; //接收字节计数变量增加sum

                }
            }));
        }
        catch
        {
            MessageBox.Show("端口接收失败,系统将关闭当前串口", "错误");
            serialPort1.Close();
        }
    }


    private void radioButton2_CheckedChanged(object sender, EventArgs e)
    {

    }
    private void timer1_Tick(object sender, EventArgs e)
    {

        if (!serialPort1.IsOpen)
        {
            serialPort1.Close();
            button1.ForeColor = Color.Black;
            button1.Text = "打开串口";
            comboBox1.Items.Clear();
            comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
        }
    }
    StringBuilder buffer = new StringBuilder();
    StringBuilder buffer1 = new StringBuilder();
    private string str;


    private string StringToHexString(string s, Encoding encode)   // 字符串转换为16进制字符 
    {
        byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组
        string result = string.Empty;
        for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符
        {
            result += Convert.ToString(b[i], 16);
        }
        return result;
    }

    private void output(string info)
    {
        textBox2.Text = "";
        textBox2.AppendText(DateTime.Now.ToString("HH:mm:ss") + info + "\r\n");
    }

    private void button6_Click(object sender, EventArgs e)
    {
        if (serialPort1.IsOpen)
        {
                
        }
        else
        {
         // button7.Text = button6.ToString / 2000;
           button7.Text = "通过";
        }
        
    }

    private void button7_Click(object sender, EventArgs e)
    {
      
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
       
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // e.KeyChar == 8 退格 删除
        if ((e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'A' && e.KeyChar <= 'Z')
            || (e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == 8))
        {
            e.Handled = false;//这可以输入
        }
        else
        {
            e.Handled = true;//不能输入
        }
    }
    
}

}



  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2022-03-05 16:45
    关注

    正则提取下内容

     
            private void button1_Click(object sender, EventArgs e)
            {
                var re = new Regex(@"flow speed:\s+(\d+(\.\d+)?)", RegexOptions.IgnoreCase);
                var mc = re.Matches(textBox1.Text);
                var grps = mc.Cast<Match>().Select(i => i.Groups[1].Value);
                MessageBox.Show(string.Join(",", grps));
            }
     
    
    

    img


    有其他问题可以继续交流~

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月7日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请