MSComm 控件

MSComm 控件通过串行端口传输和接收数据，为应用程序提供串行通讯功能。

语法

MSComm

说明

MSComm 控件提供下列两种处理通讯的方式：

•	事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下，在事件发生时需要得到通知，例如，在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下，可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表，参阅 CommEvent 属性。

•	在程序的每个关键功能之后，可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小，并且是自保持的，这种方法可能是更可取的。例如，如果写一个简单的电话拨号程序，则没有必要对每接收一个字符都产生事件，因为唯一等待接收的字符是调制解调器的“OK”响应。

每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口，必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地址和中断地址。

尽管 MSComm 控件有很多重要的属性，但首先必须熟悉几个属性。

属性	描述
CommPort	设置并返回通讯端口号。
Settings	以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen	设置并返回通讯端口的状态。也可以打开和关闭端口。
Input	从接收缓冲区返回和删除字符。
Output	向传输缓冲区写一个字符串。


MSComm 控件举例

下面这个简单的例子演示了用调制解调器进行基本的串行通讯：

Private Sub Form_Load ()

' 保存输入子串的缓冲区

Dim Instring As String

' 使用 COM1。

MSComm1.CommPort = 1

' 9600 波特，无奇偶校验，8 位数据，一个停止位。

MSComm1.Settings = "9600,N,8,1"

' 当输入占用时，

' 告诉控件读入整个缓冲区。

MSComm1.InputLen = 0

' 打开端口。

MSComm1.PortOpen = True

' 将 attention 命令送到调制解调器。

MSComm1.Output = "AT" + Chr$(13)

' 等待数据返回到串行端口。

Do

DoEvents

Loop Until MSComm1.InBufferCount >= 2

' 从串行端口读 "OK" 响应。

Instring = MSComm1.Input

' 关闭串行端口。

MSComm1.PortOpen = False

End Sub

注意  MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。


Break 属性

设置或清除中断信号的状态。该属性在设计时无效。

语法

objec.Break [ = value]

Break 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，说明中断信号是否设置，如“设置值”中所描述。
设置值

value 的设置值为：

设置值	描述
True	设置中断信号状态
False	清除中断信号状态
说明

当设置为 True，Break 属性发送一个中断信号。该中断信号挂起字符传输，并置传输线为中断状态直到把 Break 属性设置为 False。

一般，仅当使用的通讯设备要求设置一个中断信号时，才设置一个短时的中断状态。

数据类型

Boolean


Break 属性举例

下例说明如何发送一个 1/10 秒的中断信号：

'设置 Break 状态。

MSComm1.Break = True

' 设定1/10秒的期限。

Duration! = Timer + .1

'等待期限过去。

Do Until Timer > Duration!

Dummy = DoEvents()

Loop

' 清除 Break 状态。

MSComm1.Break = False


CDHolding 属性

通过查询 Carrier Detect (CD) 线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号，指示调制解调器正在联机。该属性在设计时无效，在运行时为只读。

语法

object.CDHolding

CDHolding 属性包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
设置值

CDHolding 属性的设置值为：

设置	描述
True	Carrier Detect 线为高电平
False	Carrier Detect 线为低电平
说明

注意当 Carrier Detect 线为高电平 (CDHolding = True) 且超时时，MSComm 控件设置CommEvent 属性为 comEventCDTO（Carrier Detect 超时错误），并产生 OnComm 事件。

注意  在主机应用程序中捕获一个丢失的传输是特别重要的，例如一个公告板，因为呼叫者可以随时挂起（放弃传输）。

Carrier Detect 也被称为 Receive Line Signal Detect (RLSD)。

数据类型

Boolean


CommEvent 属性

返回最近的通讯事件或错误。该属性在设计时无效，在运行时为只读。

语法

object.CommEvent

CommEvent 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

只要有通讯错误或事件发生时都会产生 OnComm 事件，CommEvent 属性存有该错误或事件的数值代码。要确定引发 OnComm 事件的确切的错误或事件，请参阅 CommEvent 属性。

CommEvent 属性返回下列值之一来表示不同的通讯错误或事件。这些常数可以在该控件的对象库中找到。通讯错误包括下列设置值：

常数	值	描述
comEventBreak	1001	接收到一个中断信号。
comEventCTSTO	1002	Clear To Send 超时。在系统规定时间内传输一个字符时，Clear To Send 线为低电平。
comEventDSRTO	1003	Data Set Ready 超时。在系统规定时间内传输一个字符时，Data Set Ready 线为低电平。
comEventFrame	1004	帧错误。硬件检测到一帧错误。
comEventOverrun	1006	端口超速。没有在下一个字符到达之前从硬件读取字符，该字符丢失。
comEventCDTO	1007	载波检测超时。在系统规定时间内传输一个字符时，Carrier Detect 线为低电平。Carrier Detect 也称为 Receive Line Signal Detect (RLSD)。
ComEventRxOver	1008	接受缓冲区溢出。接收缓冲区没有空间。
comEventRxParity	1009	奇偶校验。硬件检测到奇偶校验错误
comEventTxFull	1010	传输缓冲区已满。传输字符时传输缓冲区已满
comEventDCB	1011	检索端口的设备控制块 (DCB) 时的意外错误
通讯事件包括下列设置值：

常数	值	描述
comEvSend	1	在传输缓冲区中有比 Sthreshold 数少的字符。
ComEvReceive	2	收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
ComEvCTS	3	Clear To Send 线的状态发生变化。
comEvDSR	4	Data Set Ready 线的状态发生变化。该事件只在 DST 从 1 变到 0 时才发生。
comEvCD	5	Carrier Detect 线的状态发生变化。
comEvRing	6	检测到振铃信号。一些 UART（通用异步接收— 传输）可能不支持该事件。
comEvEOF	7	收到文件结束（ASCII 字符为 26）字符。
数据类型

Integer


CommID 属性

返回一个说明通讯设备的句柄。该属性在设计时无效，在运行时为只读。

语法

object.CommID

CommID 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

该值与 Windows API CreateFile 函数返回的值一致。在 Windows API 中调用任何通讯例程时使用该值。

数据类型

Long


CommPort 属性

设置并返回通讯端口号。

语法

object.CommPort[ = value ]

CommPort 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一整型值，说明端口号。
说明

在设计时，value 可以设置成从 1 到 16 的任何数（缺省值为 1）。但是如果用 PortOpen 属性打开一个并不存在的端口时，MSComm 控件会产生错误 68（设备无效）。

警告   必须在打开端口之前设置 CommPort 属性。

数据类型

Integer


CTSHolding 属性

确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号，指示传输可以进行。该属性在设计时无效，在运行时为只读。

语法

object.CTSHolding

CTSHolding 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
下表列出 Mscomm 控件的 CTSHolding 属性设置值：

设置	描述
True	Clear To Send 线为高电平。
False	Clear To Send 线为低电平。
说明

如果 Clear To Send 线为低电平 (CTSHolding = False) 并且超时时，MSComm 控件设置 CommEvent 属性为 comEventCTSTO (Clear To Send Timeout) 并产生 OnComm 事件。

Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态，CTSHolding 属性给出一种手工查询的方法。

详细信息   有关握手协议，请参阅 Handshaking 属性。

数据类型

Boolean


DSRHolding 属性

确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机，指示作好操作准备。该属性在设计时无效，在运行时为只读。

语法

object.DSRHolding

object 所在处表示对象表达式，其值是“应用于”列表中的对象。

DSRHolding 属性返回以下值：

值	描述
True	Data Set Ready 线高
False	Data Set Ready 线低
说明

当 Data Set Ready 线为高电平 (DSRHolding = True) 且超时时，MSComm 控件设置 CommEvent 属性为 comEventDSRTO（数据准备超时）并产生 OnComm 事件。

当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该属性是十分有用的。

数据类型

Boolean


DTREnable 属性

确定在通讯时是否使 Data Terminal Ready (DTR) 线有效。Data Terminal Ready 是计算机发送到调制解调器的信号，指示计算机在等待接受传输。

语法

object.DTREnable[ = value ]

DTREnable 属性的语法由下列部分组成：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，说明是否使 Data Terminal Ready (DTR) 线有效，如“设置值”中所描述。
设置值

value 的设置值是：

设置值	描述
True	使 Data Terminal Ready 线有效
False	（缺省）使 Data Terminal Ready 线无效
说明

当 DTREnable 设置为 True，当端口被打开时 Data Terminal Ready 线设置为高电平（开），当端口被关闭时 Data Terminal Ready 线设置为低电平（关）。当 DTREnable 设置为 False，Data Terminal Ready 线始终保持为低电平。

注意  在很多情况下，把 Data Terminal Ready 线设置为低用来挂断电话。

数据类型

Boolean


Handshaking 属性

设置并返回硬件握手协议。

语法

object.Handshaking [ = value ]

Handshaking 属性的语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明握手约定，如“设置值”中所描述。
设置值

value 设置值是：

设置值	值	描述
comNone	0	（缺省）没有握手。
comXOnXOff	1	(XON/XOFF) 握手。
comRTS	2	RTS/CTS (Request To Send/Clear To Send) 握手。
comRTSXOnXOff	3	Request To Send 和 XON/XOFF 握手皆可。
说明

Handshaking 是指内部通讯协议，通过该协议，数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口，通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区，程序需要直接从硬件读取每一个字符，这很可能会造成数据丢失，因为字符到达的速度可以非常快。

握手协议保证在缓冲区过载时数据不会丢失，缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。

数据类型

Integer


InBufferCount 属性

返回接收缓冲区中等待的字符数。该属性在设计时无效。

语法

object.InBufferCount[ = value ]

InBufferCount 属性的语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明在接收缓冲区中等待的字符数。
说明

InBufferCount 是指调制解调器已接收，并在接收缓冲区等待被取走的字符数。可以把 InBufferCount 属性设置为 0 来清除接收缓冲区。

注意  不要把该属性与 InBufferSize 属性混淆。InBufferSize 属性返回整个接收缓冲区的大小。

数据类型

Integer


InBufferSize 属性

设置并返回接收缓冲区的字节数。

语法

object.InBufferSize[ = value ]

InBufferSize 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明接收缓冲区的字节数。
说明

InBufferSize 是指整个接收缓冲区的大小。缺省值是 1024 字节。不要将该属性与 InBufferCount 属性混淆，InBufferCount 属性返回的是当前在接收缓冲区中等待的字符数。

注意  接收缓冲区越大则应用程序可用内存越小。但若接受缓冲区太小，若不使用握手协议， 就可能有溢出的危险。一般的规律是，首先设置一个 1024 字节的缓冲区。如果出现溢出错误，则通过增加缓冲区的大小来控制应用程序的传输速率

数据类型

Integer


Input 属性

返回并删除接收缓冲区中的数据流。该属性在设计时无效，在运行时为只读。

语法

object.Input

Input 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0，则 Input 属性读取缓冲区中全部的内容。

InputMode 属性确定用 Input 属性读取的数据类型。如果设置 InputMode 为 comInputModeText，Input 属性通过一个 Variant 返回文本数据。如果设置 InputMode 为 comInputModeBinary，Input 属性通过一个 Variant .返回一二进制数据的数组。

数据类型

Variant


Input Property 举例

该例子说明如何从接收缓冲区读取数据。

Private Sub Command1_Click()

Dim InString as String

' 读取所有可用数据。

MSComm1.InputLen = 0

' 检查数据。

If MSComm1.InBufferCount Then

' Read data.

InString = MSComm1.Input

End If

End Sub


InputLen 属性

设置并返回 Input 属性从接收缓冲区读取的字符数。

语法

object.InputLen [ = value]

InputLen 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明 Input 属性从接收缓冲区中读取的字符数。
说明

InputLen 属性的缺省值是 0。设置 InputLen 为 0 时，使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。

若接收缓冲区中 InputLen 字符无效，Input 属性返回一个零长度字符串 ("")。在使用 Input 前，用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。

该属性在从输出格式为定长数据的机器读取数据时非常有用。

数据类型

Integer


InputLen 属性举例

该例子说明如何读取 10 个数据字符：

Private Command1_Click()

Dim CommData as String

' 确定一个10个字符的数据块。

MSComm1.InputLen = 10

' 读数据。

CommData = MSComm1.Input

End Sub


NullDiscard 属性

确定 null 字符是否从端口传送到接收缓冲区。

语法

object.NullDiscard [ = value ]

NullDiscard 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，说明 null 字符是否从端口传送到接收缓冲区，如“设置值”中所描述
设置值

value 设置值是：

设置值	描述
True	Null 字符不从端口传送到接收缓冲区
False	（缺省值）Null 字符从端口传送到接收缓冲区
说明

null 字符定义为 ASCII 字符 0，Chr$(0)。

数据类型

Boolean


OutBufferCount 属性

返回在传输缓冲区中等待的字符数。也可以用它来清除传输缓冲区。该属性在设计时无效。

语法

object.OutBufferCount[ = value ]

OutBufferCount 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明在传输缓冲区中等待的字符数。
说明

设置 OutBufferCount 属性为 0 可以清除传输缓冲区。

注意   不要把 OutBufferCount 属性与 OutBufferSize 属性混淆，OutBufferSize 属性返回整个传输缓冲区的大小。

数据类型

Integer


OutBufferSize 属性

以字节的形式设置并返回传输缓冲区的大小。

语法

object.OutBufferSize [ = value ]

OutBufferSize 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明传输缓冲区的大小。
说明

OutBufferSize 指整个传输缓冲区的大小：缺省值是 512 字节。不要把该属性与 OutBufferCount 属性混淆，OutBufferCount 属性返回当前在传输缓冲区等待的字节数。

注意  传输缓冲区设置的越大则应用程序可用内存越小。但若缓冲区太小，若不使用握手协议，就可能有溢出的危险。一般的规律是，首先设置一个 512 字节的缓冲区。如果出现溢出错误，则通过增加缓冲区的大小来控制应用程序的传输速率。

数据类型

Integer


Output 属性

往传输缓冲区写数据流。该属性在设计时无效，在运行时为只读。

语法

object.Output [ = value ]

Output 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	要写到传输缓冲区中的一个字符串。
说明

Output 属性可以传输文本数据或二进制数据。用 Output 属性传输文本数据，必须定义一个包含一个字符串的 Variant。发送二进制数据，必须传递一个包含字节数组的 Variant 到 Output 属性。

正常情况下，如果发送一个 ANSI 字符串到应用程序，可以以文本数据的形式发送。如果发送包含嵌入控制字符、Null 字符等等的数据，要以二进制形式发送。

数据类型

Variant


Output Property 举例

下面的例子说明如何将用户键入的每一个字符送到串行端口：

Private Sub Form_KeyPress (KeyAscii As Integer)

Dim Buffer as Variant

' 设置并打开窗口

MSComm1.CommPort = 1

MSComm1.PortOpen = True

Buffer = Chr$(KeyAscii)

MSComm1.Output = Buffer

End Sub


ParityReplace 属性

当发生奇偶校验错误时，设置并返回替换数据流中一个非法字符的字符。

语法

object.ParityReplace [ = value]

ParityReplace 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	字符串表达式，表示一个字符，如说明中所描述。
说明

parity bit 是指同一定数据位数一起传输的位，以提供简单的错误检查。当使用校验位时，MSComm 控件把在数据中已经设置的所有位（值为 1）都加起来并检查其和为奇数或偶数（根据当端口开时奇偶校验的设置）。

按照缺省规定，MSComm 控件用问号 (?) 替换非法字符。若设置 ParityReplace 为一个空字符串 ("")，则当奇偶校验错误出现时，字符替换无效。但 OnComm 事件仍然产生，并且设置 CommEvent 属性为 comEventRXParity。

ParityReplace 字符被用语面向字节的操作，它必须是单字节字符。可指定 0 到 255 之间的 任何 ANSI 字符代码。

数据类型

String


PortOpen 属性

设置并返回通讯端口的状态（开或关）。在设计时无效。

语法

object.PortOpen[ = value]

PortOpen 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，说明通讯端口的状态。
设置值

value 设置值是：

设置值	描述
True	端口开
False	端口关
说明

设置 PortOpen 属性为 True 打开端口。设置为 False 关闭端口并清除接收和传输缓冲区。当应用程序终止时，MSComm 控件自动关闭串行端口。

在打开端口之前，确定 CommPort 属性设置为一个合法的端口号。如果 CommPort 属性设置为一个非法的端口号，则当打开该端口时，MSComm 控件产生错误 68（设备无效）。

另外，串行端口设备必须支持 Settings 属性当前的设置值。如果 Settings 属性包含硬件不支持的通讯设置值，那么硬件可能不会正常工作。

如果在端口打开之前，DTREnable 或 RTSEnable 属性设置为 True，当关闭端口时，该属性设置为 False。否则，DTR 和 RTS 线保持其先前的状态。

数据类型

Boolean


PortOpen 属性举例

下例以波特率 9600 打开 1 号通讯端口，没有奇偶检查，8 个数据位，1 个停止位。

MSComm1.Settings = "9600,n,8,1"

MSComm1.CommPort = 1

MSComm1.PortOpen = True


RThreshold 属性

在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前，设置并返回的要接收的字符数。

语法

object.Rthreshold [ = value ]

Rthreshold 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整型表达式，说明在产生 OnComm 事件之前要接收的字符数。
说明

当接收字符后，若 Rthreshold 属性设置为 0（缺省值）则不产生 OnComm 事件。

例如，设置 Rthreshold 为 1，接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。

数据类型

Integer


RTSEnable 属性

确定是否使 Request To Send (RTS) 线有效。一般情况下，由计算机发送 Request To Send 信号到联接的调制解调器，以请示允许发送数据。

语法

object.RTSEnable[ = value ]

RTSEnable 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，说明 Request To Send (RTS) 线是否有效，如“设置值”中所描述。
设置值

value 设置值是：

设置值	描述
True	Request To Send 线有效。
False	（缺省）Request To Send 线无效。
说明

当 RTSEnable 设置为 True，端口打开时，Request To Send 线设置为高电平，端口关闭时，设置为低电平。

Request To Send 线用在 RTS/CTS 硬件握手。RTSEnable 属性允许手动检测 Request To Send 线以确定其状态。

详细信息   有关握手协议，请参阅 Handshaking 属性。

数据类型

Boolean


Settings 属性

设置并返回波特率、奇偶校验、数据位、停止位参数。

语法

object.Settings[ = value]

Settings 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	字符串表达式，说明通讯端口的设置值，如下所述。
说明

当端口打开时，如果 value 非法，则 MSComm 控件产生错误 380（非法属性值）。

Value 由四个设置值组成，有如下的格式：

"BBBB,P,D,S"

BBBB 为波特率，P 为奇偶校验，D 为数据位数，S 为停止位数。value 的缺省值是：

"9600,N,8,1"

下表列出合法的波特率：

设置值

110

300

600

1200

2400

9600（缺省）

14400

19200

28800

38400（保留）

56000（保留）

128000（保留）

256000（保留）

下表说明合法的奇偶校验值。

设置值	描述
E	偶数 (Even)
M	标记 (Mark)
N	缺省 (Default)
None
O	奇数 (Odd)
S	空格 (Space)
下表列出合法的数据位值。

设置值

4

5

6

7

8

（缺省）

下表列出合法的停止位值。

设置值
1	（缺省）
1.5
2
数据类型

String


设置值举例

下面的例子设置控件端口通讯，波特率 9600，无奇偶校验检查，8 个数据位，1 个停止位：

MSComm1.Settings = "9600,N,8,1"


SThreshold 属性

在 MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前，设置并返回传输缓冲区中允许的最小字符数。

语法

object.SThreshold [ = value ]

Sthreshold 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	整形表达式，代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。
说明

若设置 Sthreshold 属性为 0（缺省值），数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1，当传输缓冲区完全空时，MSComm 控件产生 OnComm 事件。

如果在传输缓冲区中的字符数小于 value，CommEvent 属性设置为 comEvSend，并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如，如果 Sthreshold 等于 5，仅当在输出队列中字符数从 5 降到 4 时，comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符，comEvSend 事件将绝不会发生。

数据类型

Integer


OnComm 事件

无论何时当 CommEvent 属性的值变化时，就产生 OnComm 事件，标志发生了一个通讯事件或一个错误。

语法

Private Sub object_OnComm ()

OnComm 事件语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意，设置 Rthreshold 或 Sthreshold 属性为 0，分别使捕获 comEvReceive 和 comEvSend 事件无效。


OnComm 事件举例

下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。

Private Sub MSComm_OnComm ()

Select Case MSComm1.CommEvent

' Handle each event or error by placing

' code below each case statement

' 错误

Case comEventBreak	' 收到 Break。

       Case comEventCDTO	' CD (RLSD) 超时。

Case comEventCTSTO	' CTS Timeout。

Case comEventDSRTO	' DSR Timeout。

Case comEventFrame	' Framing Error

Case comEventOverrun	'数据丢失。

Case comEventRxOver'接收缓冲区溢出。

Case comEventRxParity' Parity 错误。

Case comEventTxFull	'传输缓冲区已满。

Case comEventDCB	'获取 DCB] 时意外错误

' 事件

Case comEvCD	' CD 线状态变化。

Case comEvCTS	' CTS 线状态变化。

Case comEvDSR	' DSR 线状态变化。

Case comEvRing	' Ring Indicator 变化。

Case comEvReceive	' 收到 RThreshold # of
chars.

Case comEvSend	' 传输缓冲区有 Sthreshold 个字符	'
'

Case comEvEof	' 输入数据流中发现 EOF 字符

'

End Select

End Sub


MSComm 控件常数

Handshake 常数

常数	值	描述
comNone	0	无握手。
comXonXoff	1	XOn/Xoff 握手。
comRTS	2	Request-to-send/clear-to-send 握手。
comRTSXOnXOff	3	Request-to-send 和 clear-to-send 握手皆可。
OnComm 常数

常数	值	描述
comEvSend	1	发送事件。
comEvReceive	2	接收事件。
comEvCTS	3	clear-to-send 线变化。
comEvDSR	4	data-set ready 线变化。
comEvCD	5	carrier detect 线变化。
comEvRing	6	振铃检测。
comEvEOF	7	文件结束。
Error 常数

常数	值	描述
comEventBreak	1001	接收到中断信号
comEventCTSTO	1002	Clear-to-send 超时
comEventDSRTO	1003	Data-set ready 超时
comEventFrame	1004	帧错误
comEventOverrun	1006	端口超速
comEventCDTO	1007	Carrier detect 超时
comEventRxOver	1008	接收缓冲区溢出
comEventRxParity	1009	Parity 错误
comEventTxFull	1010	传输缓冲区满
comEventDCB	1011	检索端口 设备控制块 (DCB) 时的意外错误
InputMode 常数

常数	值	描述
comInputModeText	0	（缺省）通过 Input 属性以文本方式取回数据。
comInputModeBinary	1	通过 Input 属性以二进制方式检取回数据。


错误信息

下表列出 MSComm 控件可以捕获的错误：

错误号	信息解释
8000	端口打开时操作不合法
8001	超时值必须大于 0
8002	非法端口号
8003	属性只在运行时有效
8004	属性在运行时为只读
8005	端口已经打开
8006	设备标志非法或不支持该设备
8007	不支持设备的波特率
8008	确定的字节大小非法
8009	缺省参数有错误
8010	硬件无效（被别的设备锁定）
8011	函数不能分配队列
8012	设备没有打开
8013	设备已经打开
8014	不能使 comm 通知有效
8015	不能设置 comm 状态
8016	不能设置 comm 事件屏蔽
8018	只当端口打开时操作才合法
8019	设备忙
8020	读 comm 设备错误


EOFEnable 属性

EOFEnable 属性确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符，将停止输入并激活 OnComm 事件，此时 CommEvent 属性设置为 comEvEOF，

语法

object.EOFEnable [ = value ]

EOFEnable 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，确定当找到 EOF 字符时，OnComm 事件是否被激活，如“设置值”中所描述。
设置值

value 的设置值时：

设置值	描述
True	当 EOF 字符找到时 OnComm 事件被激活。
False	（缺省）当 EOF 字符找到时 OnComm 事件不被激活。
说明

当 EOFEnable 属性设置为 False，OnComm 控件将不在输入流中寻找 EOF 字符。


InputMode 属性

设置或返回 Input 属性取回的数据的类型。

语法

object.InputMode [ = value ]

InputMode 属性语法包括下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	值或常数，确定输入模式，如“设置值”中所描述。
设置值

value 的设置值是：

常数	值	描述
comInputModeText	0	（缺省）数据通过 Input 属性以文本形式取回。
comInputModeBinary	1	数据通过 Input 属性以二进制形式取回。
说明

InputMode 属性确定 Input 属性如何取回数据。数据取回的格式或是字符串或是一数据组的二进制数据的数组。

若数据只用 ANSI 字符集，则用 comInputModeText。对其它字符数据，如数据中有嵌入控制字符、Nulls 等等，则使用 comInputModeBinary。


InputMode 属性举例

这个例子从通讯端口读取 10 个字节的二进制数据，并把它赋给一个字节数组。

Private Sub Command1_Click()

Dim Buffer as Variant

Dim Arr() as Byte

'设定并打开端口

MSComm1.CommPort = 1

MSComm1.PortOpen = True

'设定 InputMode 读取二进制数据

MSComm1.InputMode = comInputModeBinary

'等待直到输入缓冲区有 10 个字节

Do Until MSComm1.InBufferCount < 10

    DoEvents

Loop

'往缓冲区存二进制数据

Buffer = MSComm1.Input

'赋值于字节数组以便处理

Arr = Buffer

End Sub


Change 事件（占位符）


Click 事件（占位符）


DblClick 事件（占位符）


DragDrop 事件（占位符）


DragOver 事件（占位符）


KeyDown 事件（占位符）


KeyPress 事件（占位符）


KeyUp 事件（占位符）


MouseDown 事件（占位符）


MouseMove 事件（占位符）


MouseUp 事件（占位符）


OLECompleteDrag 事件（占位符）


OLEDragDrop 事件（占位符）


OLEDragOver 事件（占位符）


OLEGiveFeedback 事件（占位符）


OLESetData 事件（占位符）


OLEStartDrag 事件（占位符）


Refresh 方法（占位符）


OLEDrag 方法（占位符）


Appearance 属性（占位符）


BackColor 属性（占位符）


Caption 属性（占位符）


Enabled 属性（占位符）


Font 属性（占位符）


ForeColor 属性（占位符）


IntegralHeight 属性（占位符）


Locked 属性（占位符）


MouseIcon 属性（占位符）


MousePointer 属性（占位符）


OLEDragMode 属性（占位符）


OLEDropMode 属性（占位符）


SelLength 属性（占位符）


SelStart 属性（占位符）


SelText 属性（占位符）


Style 属性（占位符）


Text 属性（占位符）


未找到关键字

不能在 Visual Basic 帮助中找到已选择的关键字。可能是该关键字拼写有误、过多或过少选择文本、或所要寻求帮助的词不是有效的 Visual Basic 关键字。

要获得关于特定关键字的帮助，最简单的方法就是把插入点放到想要获得帮助的关键字内的任何地方，然后按 F1 键。不必选中该关键字。事实上，如果只选中了关键字的一部分，或超过了一个单词，“帮助”将不能找到要查找的内容。

要使用内置的“帮助”查找对话框，请按下工具栏上的“帮助主题”按钮。


Left、Top 属性（占位符）


Height、Width 属性（占位符）


Tag 属性（占位符）


ToolTipText 属性（占位符）


Count 属性（占位符）


Item 方法（占位符）


Hwnd 属性（占位符）


TabStop 属性（占位符）


Visible 属性（占位符）


Picture 属性（占位符）


Max, Min 属性（占位符）


Add 方法（占位符）


Clear 方法（占位符）


Container 属性（占位符）


控件集合（占位符）


Copies 属性（占位符）


DataBinding 对象（占位符）


DataBindings 集合（占位符）


Filename 属性（占位符）


FontBold、FontItalic、FontStrikeThru 属性（占位符）


FontName 属性（占位符）


FontSize 属性（占位符）


GetData 方法（占位符）


GetFormat 方法（占位符）


HelpFile 属性（占位符）


Item 属性（占位符）


Remove 方法（占位符）


SetData 方法（占位符）


Align 属性（占位符）


DragIcon 属性（占位符）


DragMode 属性（占位符）


HelpContextID 属性（占位符）


TabIndex 属性（占位符）


Alignment 常数（占位符）


Border 属性常数（占位符）


BorderStyle 常数（占位符）


BorderStyle 属性（ActiveX 控件）（占位符）


Clear 方法（ActiveX 控件）（占位符）


Clipboard 对象常数（占位符）


Color 常数（占位符）


CommonDialog 控件常数（占位符）


CommonDialog 错误常数（占位符）


Control 常数（占位符）


DataBindings 属性（占位符）


DDE 常数（占位符）


Drag-and-Drop 常数（占位符）


Drawing 常数（占位符）


FetchVerbs 方法（占位符）


Form 常数（占位符）


Graphics 常数（占位符）


Grid 控件常数（占位符）


Help 常数（占位符）


HideSelection 属性（ActiveX 控件）（占位符）


HideSelection 属性（占位符）


Image 属性（ActiveX 控件）（占位符）


ImageList 属性（ActiveX 控件）（占位符）


Index 属性（ActiveX 控件）（占位符）


Index 属性（占位符）


Key Code 常数（占位符）


Key 属性（ActiveX 控件）（占位符）


Menu Accelerator 常数（占位符）


Menu Control 常数（占位符）


Miscellaneous 常数（占位符）


MousePointer 常数（占位符）


OLE Container Control 常数（占位符）


Picture Object 常数（占位符）


Printer Object 常数（占位符）


RasterOp 常数（占位符）


Remove 方法（ActiveX 控件）（占位符）


ShowInTaskbar 属性（占位符）


ShowTips 属性（ActiveX 控件）（占位符）


ShowWhatsThis 方法（占位符）


Text 属性（ActiveX 控件）（占位符）


Value 属性（ActiveX 控件）（占位符）


Variant Type 常数（占位符）


Visual Basic 常数（占位符）


WhatsThisButton 属性（占位符）


WhatsThisHelp 属性（占位符）


WhatsThisHelpID 属性（占位符）


WhatsThisMode 方法（占位符）


Windows 95 控件常数（占位符）


ColIsVisible 属性（占位符）


ColPos 属性（占位符）


DataObject 对象（占位符）


DataObjectFiles 集合（占位符）


DataSource 属性（占位符）


Drag 方法（占位符）


DrawMode 属性（占位符）


FixedAlignment 属性（占位符）


GotFocus 事件（占位符）


GridLineWidth 属性（占位符）


Index 属性（控件数组）（占位符）


LostFocus 事件（占位符）


Move 方法（占位符）


Name 属性（占位符）


Object 属性（占位符）


Parent 属性（占位符）


RowColChange 事件（占位符）


RowIsVisible 属性（占位符）


RowPos 属性（占位符）


SetFocus 方法（占位符）


ZOrder 方法（占位符）


Files 方法（占位符）


Connect 事件（占位符）


HScrollSmallChange、VScrollSmallChange 属性（占位符）


MinHeight、MinWidth 属性（占位符）


“属性页”对话框（占位符）


RemoteHost 属性（占位符）


RemotePort 属性（占位符）


ViewportHeight、ViewportLeft、ViewportTop、ViewportWidth 属性（占位符）


Resync 方法（远程数据）（占位符）


ContainedVBControls 集合（占位符）


Member 对象（占位符）


Members 集合（占位符）


VBComponentsEvents 对象（占位符）


VBProjectsEvents 对象（占位符）


Files 属性（占位符）


Alignment 属性（占位符）


AboutBox 方法（占位符）


Col, Row 属性（占位符）


RowHeight 属性（占位符）


Scroll 事件（占位符）


ScrollBars 属性（占位符）


SelEndCol, SelStartCol, SelEndRow, SelStartRow 属性（占位符）


Appearance 属性 (ActiveX 控件) (placeholder)


BackColor, ForeColor 属性 (ActiveX 控件) (placeholder)


BorderStyle 常数 (ActiveX 控件) (placeholder)


Caption 属性 (ActiveX 控件) (placeholder)


Change 事件 (ActiveX 控件) (placeholder)


Clear 方法 (ActiveX 控件) (placeholder)


Click 事件 (ActiveX 控件) (placeholder)


Clipboard Object 常数 (ActiveX 控件) (placeholder)


Count 属性 (ActiveX 控件) (placeholder)


DataObject Object (ActiveX 控件) (placeholder)


DataObjectFiles 集合 (ActiveX 控件) (placeholder)


DataSource 属性 (ActiveX 控件) (placeholder)


DblClick 事件 (ActiveX 控件) (placeholder)


Drag-and-Drop 常数 (ActiveX 控件) (placeholder)


Enabled 属性 (ActiveX 控件) (placeholder)


FetchVerbs 方法 (ActiveX 控件) (placeholder)


Files 方法 (ActiveX 控件) (placeholder)


Font 属性 (ActiveX 控件) (placeholder)


FontName 属性 (ActiveX 控件) (placeholder)


FontSize 属性 (ActiveX placeholder)


GetData 方法 (ActiveX 控件) (placeholder)


GetFormat 方法 (ActiveX 控件) (placeholder)


HideSelection 属性 (ActiveX 控件) (complaceholder)


hWnd 属性 (ActiveX 控件) (placeholder)


Item 方法 (ActiveX 控件) (placeholder)


Key Code 常数 (ActiveX 控件) (placeholder)


Key 属性 (ActiveX 控件) (complaceholder)


KeyDown, KeyUp 事件 (ActiveX 控件) (placeholder)


KeyPress 事件 (ActiveX 控件) (placeholder)


Max, Min 属性 (ActiveX 控件) (placeholder)


MouseDown, MouseUp 事件 (ActiveX 控件) (placeholder)


MouseIcon 属性 (ActiveX 控件) (placeholder)


MouseMove 事件 (ActiveX 控件) (placeholder)


MousePointer 常数 (ActiveX 控件) (placeholder)


MousePointer 属性 (ActiveX 控件) (placeholder)


OLECompleteDrag 事件 (ActiveX 控件) (placeholder)


OLEDrag 方法 (ActiveX 控件) (placeholder)


OLEDragDrop 事件 (ActiveX 控件) (placeholder)


OLEDragMode 属性 (ActiveX 控件) (placeholder)


OLEDragOver 事件 (ActiveX 控件) (placeholder)


OLEDropMode 属性 (ActiveX 控件) (placeholder)


OLEGiveFeedback 事件 (ActiveX 控件) (placeholder)


OLESetData 事件 (ActiveX 控件) (placeholder)


OLEStartDrag 事件 (ActiveX 控件) (placeholder)


Picture 属性 (ActiveX 控件) (placeholder)


属性页对话框 (ActiveX 控件) (placeholder)


RemoteHost 属性 (ActiveX 控件) (placeholder)


RemotePort 属性 (ActiveX 控件) (placeholder)


SelLength, SelStart, SelText 属性 (ActiveX 控件) (placeholder)


SetData 方法 (ActiveX 控件) (placeholder)


ShowTips 属性 (ActiveX 控件) (complaceholder)


Text 属性 (ActiveX 控件) (complaceholder)


Value 属性 (ActiveX 控件) (complaceholder)


hDC 属性 (ActiveX 控件) (complaceholder)


Height, Width 属性 (ActiveX 控件) (complaceholder)


Index 属性 (ActiveX 控件) (complaceholder)


Left, Top 属性 (ActiveX 控件) (complaceholder)


Tag 属性 (ActiveX 控件) (complaceholder)


Visible 属性 (ActiveX 控件) (complaceholder)


Remove 方法 (ActiveX 控件) (complaceholder)


Object 属性 (ActiveX 控件) (placeholder)


属性页 (ActiveX 控件) (placeholder)


字体不存在 (错误 24574) (公用对话框控件) (complaceholder)


帮助内容placeholder


BorderStyle 属性 (ActiveX 控件) (placeholder)


RightToLeft 属性 (ActiveX 控件) (placeholder)


Refresh 方法 (ActiveX 控件) (placeholder)