我想做一个winform窗口,只有两个控件,一个显示重量的textbox,一个磅重的button,电子磅秤通过COM口连接电脑,点击button后textbox就立即显示重量,请问怎样实现!我是一名菜鸟,请大家多多指教!谢谢!
解决方案 »
- 请教论坛的问题
- c#调用vc写的dll出问题
- 请教:C#传递数组到JS函数里~~~
- CheckedListBox.DataSource 绑定后无法显示!!高级BUG
- 如何让StreamReader读取文本时不作缓冲
- winform 自定义报表
- scenecontrol加载的三维场景和axmapcontrol加载地图互操作
- 求救DataGrid的问题
- C#获得主板序列号、电池、显卡、BIOS各种信息的源代码大奉送---这个帖子进不去了。
- File类 有CopyTo方法吗,我觉得好像应该是 FileInfo类才有CopyTo方法
- datagridview创建数据连接后数据无法保存数据库
- 有一个UTF8码的字符串,如何转换为正文。例如:
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(); } }
}代码如上,读取来的信息并不是数值
数据如下
?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();
}那位大侠帮帮小弟吧 感激不尽