想实现一个功能,一个combo里面显示计算机上的串口号,一个命令按钮用于打开这个串口,遇到一个问题就是如果我用另外一个软件打开计算机上的一个串口,比如com1,然后我在combo里选择com1后按下打开串口按钮,总是显示串口已经打开。我在Mscomm的oncomm事件里写了错误处理,可是好像程序根本就没运行到oncomm程序段就显示实时错误8005,端口已经打开。
我想知道在vb里怎么捕获一个端口是否已经被打开或无效,我在命令按钮里用if语句判断也不行。

解决方案 »

  1.   

    程序代码如下:请高手帮忙
    Private Sub Cmdopencom_Click()
         Me.MSComm1.CommPort = Right(Me.Combo1.Text, 1)
         If Me.MSComm1.PortOpen = False Then
            Me.MSComm1.PortOpen = True
         Else
            If MsgBox("端口已经打开", vbOKOnly) = vbOK Then
            Exit Sub
            End If
          End If
    End Sub
      

  2.   


    Private Sub Cmdopencom_Click()
    on error goto OpenErr
        Me.MSComm1.CommPort = Right(Me.Combo1.Text, 1)
        If Me.MSComm1.PortOpen = False Then
            Me.MSComm1.PortOpen = True
        End If
        Exit sub
    OpenErr:
        msgbox "串口打开失败"
    End Sub
      

  3.   

    Private Sub Cmdopencom_Click()
    on error Resume next
        Err.clear
        Me.MSComm1.CommPort = Right(Me.Combo1.Text, 1)
        If Me.MSComm1.PortOpen = False Then
            Me.MSComm1.PortOpen = True
        End If
        if err.number<>0 then
            msgbox "串口打开失败"
        end if
    End Sub
      

  4.   

    打开时用On Error GoTo语句
    Option Explicit
        Dim i As Long
        Dim entry
    Private Sub Combo1_Click()
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
        End If
        MSComm1.CommPort = Val(Combo1)
    End SubPrivate Sub Command1_Click()
        On Error GoTo useErr
        If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
        End If
        Exit Sub
    useErr:
        MsgBox ("COM错误!=" & Err.Number)
    End SubPrivate Sub Form_Load()
        For i = 1 To 16 ' 计数值从 1 到 100。
            entry = i    ' 创建输入项。
            Combo1.AddItem entry   ' 添加该输入项。
        Next i
    End Sub
      

  5.   

    我是这样写的
    Private Sub Cmdopencom_Click()
     On Error GoTo err
         Me.MSComm1.CommPort = Val(Right(Me.Combo1.Text, 1))
     If Me.Cmdopencom.Caption = "打开串口" Then
         If Me.MSComm1.PortOpen = False Then
           Me.MSComm1.PortOpen = True
           Me.Cmdopencom.Caption = "关闭串口"
         Exit Sub
         End If
     Else
        If Me.Cmdopencom.Caption = "关闭串口" Then
              Me.MSComm1.PortOpen = False
        End If
     End If
     
    err:
     MsgBox err.Description, vbExclamation + vbOKOnly, "提示信息"
    End Sub
    问题是当一个串口被打开时是可以提示串口被占用,但当我打开一个串口后想要关闭这个串口是程序运行到红色的部分就跳过了直接运行err了,各位高手能详细解释下为什么吗?