如何用VB2005的SerialPort进行多窗体的数据接收?

作者&投稿:揣幸 (若有异议请与网页底部的电邮联系)
用VB2005的SerialPort进行多窗体的数据接收?我也正头疼该问题,能请教下如何解决吗?~

搞错了吧…… SerialPort是操作串口的,怎么接收窗体的数据的?

窗体1名叫 form1吧 ,窗体2 =form2
form2.Text1=form1.text1
form2.Text2=form1.text2

类摊的 自己想办法吧 ,可以定义一个数据变量 ,点一次的时候变量=1 执行一段代码
点2下的时候累加变量=2 执行指定的代码

仔细看下空格后面的话 实在解决不了
你留个邮箱或者QQ什么的 现在这样说话太不方便了,
如果用MSCOMM的话
我就能帮你了对SerialPort不是很熟悉
它有个ONCOMM 事件 只要接收缓冲区数据大于设定值 就触发事件
如果你的程序很小的话可以考虑用一个苯一点的办法------就是发送一个数据之后延时一下 在直接接收.至于你说的多窗体的话 可以这样写
比如说你的控件在FORM1 ,在如果在FORM2中或者其它的窗体中时用FORM1.MSCOMM32.OUTPUT=..........
你可以做一个通用的数据处理的过程
把它放在ONCOMM 的事件中

不管哪个界面 只要串口有数据回来FORM1的MSCOMM32就会触发事件,然后定义一个公共变量把Form1中的ONCOMM事件中得到的数据放如公共变量中, 各个窗体通过这个公共变量显示串口数据

Imports System
Imports System.IO.Ports
Imports System.Threading

Public Class PortChatClass PortChat
Shared _continue As Boolean
Shared _serialPort As SerialPort

Public Shared Sub Main()Sub Main()
Dim name As String
Dim message As String
Dim sComparer As StringComparer = StringComparer.OrdinalIgnoreCase
Dim readThread As Thread = New Thread(AddressOf Read)

' Create a new SerialPort object with default settings.
_serialPort = New SerialPort()

' Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName(_serialPort.PortName)
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate)
_serialPort.Parity = SetPortParity(_serialPort.Parity)
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits)
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits)
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake)

' Set the read/write timeouts
_serialPort.ReadTimeout = 500
_serialPort.WriteTimeout = 500

_serialPort.Open()
_continue = True
readThread.Start()

Console.Write("Name: ")
name = Console.ReadLine()

Console.WriteLine("Type QUIT to exit")

While (_continue)
message = Console.ReadLine()

If sComparer.Equals("quit", message) Then
_continue = False
Else
_serialPort.WriteLine( _
String.Format("<{0}>: {1}", name, message))
End If
end while

readThread.Join()
_serialPort.Close()
End Sub

Public Shared Sub Read()Sub Read()
While (_continue)
Try
Dim message As String = _serialPort.ReadLine()
Console.WriteLine(message)
Catch ex As TimeoutException
' Do nothing
End Try
End While
End Sub

Public Shared Function SetPortName()Function SetPortName(ByVal defaultPortName As String) As String
Dim newPortName As String

Console.WriteLine("Available Ports:")
Dim s As String
For Each s In SerialPort.GetPortNames()
Console.WriteLine(" {0}", s)
Next s

Console.Write("COM port({0}): ", defaultPortName)
newPortName = Console.ReadLine()

If newPortName = "" Then
newPortName = defaultPortName
End If
Return newPortName
End Function

Public Shared Function SetPortBaudRate()Function SetPortBaudRate(ByVal defaultPortBaudRate As Integer) As Integer
Dim newBaudRate As String

Console.Write("Baud Rate({0}): ", defaultPortBaudRate)
newBaudRate = Console.ReadLine()

If newBaudRate = "" Then
newBaudRate = defaultPortBaudRate.ToString()
End If

Return Integer.Parse(newBaudRate)
End Function

Public Shared Function SetPortParity()Function SetPortParity(ByVal defaultPortParity As Parity) As Parity
Dim newParity As String

Console.WriteLine("Available Parity options:")
Dim s As String
For Each s In [Enum ]Enum].GetNames(GetType(Parity))
Console.WriteLine(" {0}", s)
Next s

Console.Write("Parity({0}):", defaultPortParity.ToString())
newparity = Console.ReadLine()

If newparity = "" Then
newparity = defaultPortParity.ToString()
End If

Return CType([Enum ]Enum].Parse(GetType(Parity), newParity), Parity)
End Function

Public Shared Function SetPortDataBits()Function SetPortDataBits(ByVal defaultPortDataBits As Integer) As Integer
Dim newDataBits As String

Console.Write("Data Bits({0}): ", defaultPortDataBits)
newDataBits = Console.ReadLine()

If newDataBits = "" Then
newDataBits = defaultPortDataBits.ToString()
End If

Return Integer.Parse(newDataBits)
End Function

Public Shared Function SetPortStopBits()Function SetPortStopBits(ByVal defaultPortStopBits As StopBits) As StopBits
Dim newStopBits As String

Console.WriteLine("Available Stop Bits options:")
Dim s As String
For Each s In [Enum ]Enum].GetNames(GetType(StopBits))
Console.WriteLine(" {0}", s)
Next s

Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString())
newStopBits = Console.ReadLine()

If newStopBits = "" Then
newStopBits = defaultPortStopBits.ToString()
End If

Return CType([Enum ]Enum].Parse(GetType(StopBits), newStopBits), StopBits)
End Function

Public Shared Function SetPortHandshake()Function SetPortHandshake(ByVal defaultPortHandshake As Handshake) As Handshake
Dim newHandshake As String

Console.WriteLine("Available Handshake options:")
Dim s As String
For Each s In [Enum ]Enum].GetNames(GetType(Handshake))
Console.WriteLine(" {0}", s)
Next s

Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString())
newHandshake = Console.ReadLine()

If newHandshake = "" Then
newHandshake = defaultPortHandshake.ToString()
End If

Return CType([Enum ]Enum].Parse(GetType(Handshake), newHandshake), Handshake)
End Function
End Class

using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
...{
static bool _continue;
static SerialPort _serialPort;

public static void Main()
...{
string name;
string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
Thread readThread = new Thread(Read);

// Create a new SerialPort object with default settings.

_serialPort = new SerialPort();

// Allow the user to set the appropriate properties.

_serialPort.PortName = SetPortName(_serialPort.PortName);
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
_serialPort.Parity = SetPortParity(_serialPort.Parity);
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

// Set the read/write timeouts

_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;

_serialPort.Open();
_continue = true;
readThread.Start();

Console.Write("Name: ");
name = Console.ReadLine();

Console.WriteLine("Type QUIT to exit");

while (_continue)
...{
message = Console.ReadLine();

if (stringComparer.Equals("quit", message))
...{
_continue = false;
}
else
...{
_serialPort.WriteLine(
String.Format("<{0}>: {1}", name, message) );
}
}

readThread.Join();
_serialPort.Close();
}

public static void Read()
...{
while (_continue)
...{
try
...{
string message = _serialPort.ReadLine();
Console.WriteLine(message);
}
catch (TimeoutException) ...{ }
}
}

public static string SetPortName(string defaultPortName)
...{
string portName;

Console.WriteLine("Available Ports:");
foreach (string s in SerialPort.GetPortNames())
...{
Console.WriteLine(" {0}", s);
}

Console.Write("COM port({0}): ", defaultPortName);
portName = Console.ReadLine();

if (portName == "")
...{
portName = defaultPortName;
}
return portName;
}

public static int SetPortBaudRate(int defaultPortBaudRate)
...{
string baudRate;

Console.Write("Baud Rate({0}): ", defaultPortBaudRate);
baudRate = Console.ReadLine();

if (baudRate == "")
...{
baudRate = defaultPortBaudRate.ToString();
}

return int.Parse(baudRate);
}

public static Parity SetPortParity(Parity defaultPortParity)
...{
string parity;

Console.WriteLine("Available Parity options:");
foreach (string s in Enum.GetNames(typeof(Parity)))
...{
Console.WriteLine(" {0}", s);
}

Console.Write("Parity({0}):", defaultPortParity.ToString());
parity = Console.ReadLine();

if (parity == "")
...{
parity = defaultPortParity.ToString();
}

return (Parity)Enum.Parse(typeof(Parity), parity);
}

public static int SetPortDataBits(int defaultPortDataBits)
...{
string dataBits;

Console.Write("Data Bits({0}): ", defaultPortDataBits);
dataBits = Console.ReadLine();

if (dataBits == "")
...{
dataBits = defaultPortDataBits.ToString();
}

return int.Parse(dataBits);
}

public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
...{
string stopBits;

Console.WriteLine("Available Stop Bits options:");
foreach (string s in Enum.GetNames(typeof(StopBits)))
...{
Console.WriteLine(" {0}", s);
}

Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());
stopBits = Console.ReadLine();

if (stopBits == "")
...{
stopBits = defaultPortStopBits.ToString();
}

return (StopBits)Enum.Parse(typeof(StopBits), stopBits);
}

public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
...{
string handshake;

Console.WriteLine("Available Handshake options:");
foreach (string s in Enum.GetNames(typeof(Handshake)))
...{
Console.WriteLine(" {0}", s);
}

Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString());
handshake = Console.ReadLine();

if (handshake == "")
...{
handshake = defaultPortHandshake.ToString();
}

return (Handshake)Enum.Parse(typeof(Handshake), handshake);
}
}


VB2005如何把数据输出成为WORD或者Excel报表
hwnd Long,指定一个窗口的句柄,有些时候,Windows程序有必要在创建自己的主窗口前显示一个消息框。如果发生这种情况,由这个参数指定的窗口就会作为消息框的父窗口使用。在VB环境中,通常将活动窗体的窗口句柄作为这个参数使用 lpOperation String,指定字串“Open”来打开lpFlie文档;或指定“Print”来打印...

500分的VB2005 DLL编写 问题。
据我所知VB6至少有两种方法可以写有函数返回的DLL http:\/\/hi.baidu.com\/lyglay\/blog\/item\/7843fcfb2b143160024f562f.html 看下这里,是一种变通的方法,不需要对VB做手术就可以,另一种更彻底,见该页最下方,有一个VB_DLL_Link的链接,下载它试试吧 ...

VS2005如何用VB.NET代码实现打印功能
有个PrintDocument控件,可以实现打印。。。MSDN原话:使用 PrintDocument 组件 涉及 PrintDocument 组件的两种主要情况是:简单的打印作业,如打印单个文本文件。在这种情况下,应将 PrintDocument 组件添加到 Windows 窗体,然后在 PrintPage 事件处理程序中添加打印文件的编程逻辑。 该编程逻辑应以使用 Print 方法...

vb2005用画点方法Pset
PSet 方法 在 Visual Basic 6.0 中,PSet 方法用于更改窗体或 PictureBox 控件上的像素颜色。如果 DrawWidth 属性设置为大于 1 的值,PSet 方法将绘制实心圆。如果使用了被省略的 ForeColor ,可通过另一个可选参数指定颜色。在 Visual Basic 2005 中,没有 PSet 方法的等效项。若要更改窗体或 ...

老爸要学VB2005了,我是软件工程的大三生,应该如何教他
仪器管理程序与学校的报表生成程序 主要是数据库管理系统。实际使用到是添加、删除、修改、打印。几项功能。我觉得数据库方面还比较的简单。学VB的话,主要是学一下控件(包括控件的属性及空间的事件)

VB2005与VB6.0有什么区别
VB2005也叫做vb.net那个是在VB6.0的基础上学的,可以说如果你精通了VB6.0那么你可以转vb.net 因为vb.net功能更强大,内容更丰富,但是不建议你直接学vb.net(如果你没有其他语言的基础),直接学vb.net有点难,而且如果是你自学的话,还容易放弃,而且vb.net的教材很少啊,基本都是英语的,对了,...

VB2005 和VS2005的区别
不存在vb2005 vb是一门语言的名字 版本号用的最多的就是 vb6 和vb.net vs2005是一个集成开发工具,里面提供了各种语言的编译和编辑工具 vs2005工具可以用来开发vb.net程序 使用的.net版本是 framework2.0

vb如何插入一个连接 vb2005懂的速速联系我!
有一个直接简单的方法就是用label控件。首先在界面添加一个Label控件,然后点击该Label,在右边属性设置如下:Text属性:设置成你要的链接文字 ForeColor属性:设置为蓝色,也就是让它的字体变为链接常用的蓝色 Font属性:点击右边那个省略号,在弹出窗口的左下方,效果那里勾上下划线。这样链接就有下划线了...

怎样在vb2005窗体内的panel控件上绘一条直线
第一步:引用进名字空间 using System.Drawing;第二步:拖一个panel到Form中,这里叫做panel1 第三步:右键点击panel,打开属性,然后双击Paint的那个事件 第四步:把这段代码粘贴到函数panel1_Paint中 Graphics g = panel1.CreateGraphics();Pen red = new Pen(Color.Red, 3);g.DrawLine(red, ...

求代码解释(vb2005)
1.按钮 Private Sub btnCusFindAll_Click '显示 customer 表的所有记录 2.按钮 Private Sub btnCusFindLevel_Click '只显示符合 Me.cbCusLevel 所选定的 Level 的记录 3.按钮 Private Sub btnCusFindPrintDelete_Click ' 删除一条记录 举例解释:Dim sqlStr As String = "select * from ...

屏边苗族自治县17818197198: 关于取硬盘序列号的问题VB与ASP -
伍世金泽: 您可以参考如下程序代码:磁盘序列号在每次软盘或硬盘格式化后都重新生成,并且不会重复.许多程序员用此加密.其实也可以修改该函数,可以得到磁盘卷标...

屏边苗族自治县17818197198: 关于51 C编程中使用stdio.h开发串口,使用printf的问题 -
伍世金泽: 在单片机中用printf通过串口输出需要对串口进行相应配置,你可以在KEIL51的例程中看到一个HELLO的程序./*------------------------------------------------------------------------------ HELLO.C Copyright 1995-2005 Keil Software, Inc.------------------------------------...

屏边苗族自治县17818197198: C++ 串口API 异步操作 -
伍世金泽: 初始化://串行设备句柄; HANDLE hComDev=0; //串口打开标志; BOOL bOpen=FALSE; //线程同步事件句柄; HANDLE hEvent=0; DCB dcb; COMMTIMEOUTS timeouts; /...

屏边苗族自治县17818197198: 大神们,帮我用VC实现获取硬盘序列号的类吧,用C++实现,获取硬盘序列号存到一个字符串里. -
伍世金泽: 用GetVolumeInformation吧,下面是一段示例,不是我写的,应该有效.#include "stdafx.h"#include<iostream...

屏边苗族自治县17818197198: VB中删除文件夹 -
伍世金泽: 兄台.你复制下面的代码,试试如果成功的话.能否给个5 分10分给我,呵呵 开玩笑啦'VB强行删除目录或(VB强行删除文件)模块源码'需要控件:command1Public Enum FO_OperationFO_MOVE = 1FO_COPY...

屏边苗族自治县17818197198: 怎样把家用电脑改为游戏电脑 玩游戏卡网页不卡 怎样就不卡了 8M电信网 -
伍世金泽: 你好: 你的显卡和CPU有些低,你可以把显卡升级成2G显存的.CPU可以升级成I5的.大概价格在1000元左右. 希望我的回答对您有所帮助,如...

屏边苗族自治县17818197198: 请教ASP时间函数 -
伍世金泽: ASP时间函数详解Date 函数描述:返回当前系统日期.语法:DateDateAdd 函数描述:返回已添加指定时间间隔的日期. 语法:DateAdd(interval, number, date)interval: 必选.字符串表达式,表示要添加的时...

屏边苗族自治县17818197198: VB 6.0调用 C# COM组件问题 -
伍世金泽: [DispId(5)] IntPtr getWavelengths(int spectrometerIndex);

屏边苗族自治县17818197198: Visual Assist X trial 怎么激活?我有一个注册码器,一个NAME对应一个Serial -
伍世金泽: “VA_X.dll”文件 密码:3qbs 用这个文件替换掉安装目录里的“VA_X.dll”文件.ps:替换之前需要关闭vs软件(只适合vs2010及之前的ide)

屏边苗族自治县17818197198: 如何实现多串口的同步通?C#如何实现多串口的同步通讯
伍世金泽: 每个串口都可以独立操作,你需要打开多少个串口都可以啊,你说的同步就是多线程阻塞式通讯,开独立的线程用于一个串口的读写操作就可以了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网