我用交叉线做一个自收发的程序,
代码如下:Private Sub RComm_OnComm()
If RComm.CommEvent = 2 Then
RsTxt.Text = RComm.Input
End If
SComm.PortOpen = False
RComm.PortOpen = False
End SubPrivate Sub SdCmd_Click()
SComm.CommPort = 1
SComm.Settings = "115200,n,8,1"
SComm.SThreshold = 1
SComm.PortOpen = TrueRComm.CommPort = 2
RComm.Settings = "115200,n,8,1"
RComm.InputMode = 0
RComm.PortOpen = True
RComm.RThreshold = 1SComm.Output = SdTxt.Text
End Sub现在我的问题是:
如果发送的数据为空,
我按两次发送按钮的时候,第二次会发生错误,
说端口已经打开。
我的想法是,第一次发送数据的时候,
运行到SComm.Output = SdTxt.Text
的时候已经触发了RComm_OnComm()事件了,
(因为我在它后面加msgbox RComm.CommEvent返回2。)
而如果触发了RComm_OnComm()事件,端口就应该被关闭呀。
为什么事实上没有被关闭呢?

解决方案 »

  1.   

    如果你打开了串口
    当然不会关闭了,需要用MSComm1.PortOpen = False关闭所以当你点击一次按钮,串口连接并发送信息,而你第二次点击按钮,又会用PortOpen=true ,于是就报错了。正确的用法是,串口打开只一次,比如放到form_load里,按扭的事件只是发送。退出的时候加上MSComm1.PortOpen = False
    就可以了
      

  2.   

    如果触发了RComm_OnComm()事件,端口就应该被关闭呀。
    ==============
    这是你理解的错误 :)
      

  3.   

    你看我代码呀,我在RComm_OnComm()关了端口的,
    没关的原因我想是因为没有触发RComm_OnComm()事件,
    但我调试的时候它明明返回的是2,就是说已经触发了这个事件,
    那到底是触发了还是没触发呢?郁闷~~~
      

  4.   

    完全可以这样回避一下这个错误的嘛!
    if not SComm.PortOpen then SComm.PortOpen = True
      

  5.   

    抱歉,没仔细看,光看你的cmd里的代码了。
    方法象 samwzhang(分全给我)就可以了,看看有错没还