其实参考资料已经写的非常清楚了,哪些方法会触发oncomm事件!
麻烦阁下问问题之前多找资料先!

解决方案 »

  1.   

    很多事件逗可以触发这个事件的,所以一般需要根据事件类型做出判断这个MSCOMM控件的例子里面有的,你仔细看看
      

  2.   

    Private Sub MSComm1_OnComm()
      Dim strIn
      Dim a, i, j As Integer
      Dim TempNumber(10) As String
      Dim CardLen As Integer
      
      '如果不是返回 值事件退出
      If MSComm1.CommEvent <> 2 Then
          Exit Sub
      End If
      
      strIn = MSComm1.Input
      i = UBound(strIn)
      
      Select Case MSComm1.CommEvent
        Case comEvReceive
          For j = 1 To i
            If strIn(a) = "HD" Then
              CardLen = 0
              Exit For
            End If
            TempNumber(CardLen) = Hex(strIn(a))
            SBar.Panels(2).Text = SBar.Panels(2).Text & Hex(strIn(a)) & " "
            CardLen = CardLen + 1
          Next j
          
          '处理划卡
          
        Case comEvSend
        ...
        Case comEvRing
        ...
      End Select
    End Sub
      

  3.   

    我已经查过msdn了,是有个例子介绍的。但是我把所有的代码原版复制过来还是没有触发oncomm事件,所以我想是不是有什么设置上的问题呢?
      

  4.   

    metin(风浪):
      不行啊,我把你的代码复制过来还是不响应。
      

  5.   

    Rth..属性的设置,名字我记不太清楚了.一定要设为非0
      

  6.   

    我发现把com的RThreshold属性改成我要求的传输字符数就可以利用commEvent的comEvReceive来触发oncomm事件
    但是这样安全吗?
      

  7.   

    晕~~~你必须初始化MSComm1  MSComm1.CommPort = 1
      MSComm1.Settings = "9600,N,8,1"
      MSComm1.PortOpen = True
      If Err = 8002 Then
        MsgBox "网卡通讯口设置错误,请重新设置!", 16, "错误"
        Exit Sub
      End If
      If Err = 8005 Then
        MsgBox "网卡通讯口设置错误,串口" & MSComm1.CommPort & "已被其它程序占用,请重新设置!", 16, "错误"
        Exit Sub
      End If
      MSComm1.InputLen = 0
      MSComm1.InputMode = comInputModeBinary
      MSComm1.RThreshold = 1
      MSComm1.InBufferCount = 0
      MSComm1.OutBufferCount = 0
      

  8.   

    想数量限制简单呀,你定义通讯协议,有结束协议就可以了。msdn上说的很详细了。你结合硬件应该可以搞定的。:)
      

  9.   

    你可以点击比如菜单(发送、接收)或者按钮(发送、接收)来人工触发,写发送接收代码。
    你也可以通过oncomm来触发,前提是Rthreshold和Sthreshold属性不能为0,如果为0了,comEvReceive和comEvSend事件就无效。
    数量的限制一般跟硬件方面是有传输的通讯协议的,按照格式发送和接收。
      

  10.   

    谢谢各位了,我现在已经可以通过oncomm事件来实现通信了
    但是我发现一个很奇怪的问题,就是我不能连续发2个码给对方,否则的话就要丢失一部分的码。
    如第一次发了“1234567”,然后紧接着发“ABCDEFG”的话
    接收方会收到“1234567A”
    我定义的inbuffersize=7
    而且每次发送前,接收后,我都会把各自的inbuffercount和outbuffercount清零的。怎么还会收到多的呢?
      

  11.   

    哈哈,你没看到我给的程序中有这个吗?
    If strIn(a) = "HD" Then
       CardLen = 0
       Exit For
    End If
    它是我临时规定的协议,当遇到HD时候,我认为一个串已经完成了。你自己定义好协议做什么都行了.
      

  12.   

    谢谢风浪,
    你是把收到的字符一个一个的存到字符数组里的,我是直接拿来用的:inString=com2.input
    呵呵,然后就对inString操作就可以了。
    我现在已经基本解决我的通信问题了,差不多达到要求了,至于完善嘛,要看实际应用了,呵呵,谢谢。