我想做一个winform窗口,只有两个控件,一个显示重量的textbox,一个磅重的button,电子磅秤通过COM口连接电脑,点击button后textbox就立即显示重量,请问怎样实现!我是一名菜鸟,请大家多多指教!谢谢!

解决方案 »

  1.   

    添加一个SerialPort控件,设好后,就可以用了。
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    namespace 读取条形码
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        //定义 SerialPort对象
            SerialPort port1;        //初始化SerialPort对象方法.PortName为COM口名称,例如"COM1","COM2"等,注意是string类型
            public void InitCOM(string PortName)
            {
                port1 = new SerialPort(PortName);
                port1.BaudRate = 9600;//波特率
                port1.Parity = Parity.None;//无奇偶校验位
                port1.StopBits = StopBits.Two;//两个停止位
                port1.Handshake = Handshake.RequestToSend;//控制协议
                port1.ReceivedBytesThreshold = 4;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数
                port1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);//DataReceived事件委托
                
                byte[] WriteBytes = Encoding.ASCII.GetBytes("AT+CGMI\r");   
            }        //DataReceived事件委托方法
            private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    StringBuilder currentline = new StringBuilder();
                    //循环接收数据
                    while (port1.BytesToRead > 0)
                    {
                        char ch = (char)port1.ReadByte();
                        currentline.Append(ch.ToString());
                    }
                    //在这里对接收到的数据进行处理
                    textBox2.Text = currentline.ToString();
                    currentline = new StringBuilder();
                    port1.Close();
                }
                catch (Exception ex)
                {
                    textBox2.Text = ex.Message.ToString();
                }        }        //打开串口的方法
            public void OpenPort()
            {
                try
                {
                    port1.Open();
                }
                catch { }
                if (port1.IsOpen)
                {
                    textBox3.Text = "the port is opened!";
                }
                else
                {
                    textBox3.Text = "failure to open the port!";
                }
            }        //关闭串口的方法
            public void ClosePort()
            {
                port1.Close();
                if (!port1.IsOpen)
                {
                    textBox3.Text = "the port is already closed!";
                }
            }        //向串口发送数据
            public void SendCommand(string CommandString)
            {
                byte[] WriteBuffer = Encoding.ASCII.GetBytes(CommandString);
                port1.Write(WriteBuffer, 0, WriteBuffer.Length);
            }
            private void Form1_Load(object sender, EventArgs e)
            {        }        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                string str = "";
                textBox1.Text = str;        }        private void button1_Click(object sender, EventArgs e)
            {
                //我现在用的COM1端口,按需要可改成COM2,COM3
                InitCOM("COM3");
                OpenPort();        }    }
    }代码如上,读取来的信息并不是数值
      

  3.   

    我用测试软件把数据可以读取出来
    数据如下
    ?Z潄?)ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    ST,GS,+    0.0 kg  
    US,GS,+    8.5 kg  
    US,GS,+    7.5 kg  
    US,GS,+    7.3 kg  
    US,GS,+    7.2 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.1 kg  
    US,GS,+    7.0 kg  
    US,GS,+    7.0 kg  
    US,GS,+    7.0 kg  
    US,GS,+    7.0 kg  
    US,GS,+    7.0 kg  
    US,GS,+    7.0 kg  
    US,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0 kg  
    ST,GS,+    7.0
    一直不停的出数据 我想实现
    打开窗体 就开始读取数据 把数值显示在 一个Label上(数值一直不停的在变化)  单击确认 将最后显示的值传到另一个窗体上将程序生成好后 一接受数据 程序自动就关闭了我的代码是:
    //加载事件
    private void CzForm_Load(object sender, EventArgs e)
            {
                if (SpCom.IsOpen)
                {
                    SpCom.Close();
                }
                else
                {
                    SpCom.PortName = "COM1";
                    SpCom.BaudRate = 2400;
                    SpCom.Parity = Parity.None;
                    SpCom.DataBits = 8;
                    SpCom.StopBits = StopBits.One;
                    SpCom.Open();
                    this.SpCom.DataReceived += new SerialDataReceivedEventHandler(SpCom_DataReceived);
                    //byte[] data = Convert.FromBase64String(SpCom.ReadLine());
                    //this.textBox1.Text = Encoding.Unicode.GetString(data);
                }
            }private void SpCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                //使用委托进行跨线程读取数据
                label2.Invoke(new EventHandler(delegate
                {
                    string txt = SpCom.ReadExisting();
                    //txt = txt.Remove();
                    txt = txt.Remove(0, 7);
                    txt = txt.Remove(txt.LastIndexOf("kg"));
                    label2.Text = txt.Trim();
                }));
            }退出将信息显示在另一个窗体上
    private void button1_Click(object sender, EventArgs e)
            {            if (SpCom.IsOpen)
                {
                    SpCom.Close();
                }
                AddYwxxForm.zl = this.label2.Text.Trim();
                this.Close();
            }那位大侠帮帮小弟吧 感激不尽