当前位置:编程学习 > VB >>

VB控件问题,Input数据没了。

源代码如下:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
    MSComm1.InputLen = 0
    MSComm1.InputMode = 0
    MSComm1.RThreshold = 1 '返回接收的字符数
    MSComm1.Settings = "9600,e,7,1" '传输格式:9600bps,偶校验,7位数据,1位停止位
    MSComm1.CommPort = 1 '端口选择1    
End Sub
Private Sub Command2_Click()
    Dim instring As String
    If MSComm1.PortOpen = False Then
       MSComm1.PortOpen = True
    End If
    MSComm1.Output = Chr(&H2) + "0" + "13E8" + "02" + Chr(&H3) + "76"   
    Sleep (500)
    Select Case MSComm1.CommEvent
    Case comEvReceive
    instring = MSComm1.Input
    Text1.Text = Val(instring)
    End Select
End Sub

当程序运行到Select Case MSComm1.CommEvent的时候调试结果MSComm1.Input有数据,但跳到下一步的时候就变零了,instring和Text1.Text都显示是0,求高手帮助!然后教我如何把Input里面的一段数据取出来,急!!! --------------------编程问答-------------------- 首先你的程序上有一个明显的问题,你设置的InputMode是0,也就是二进制方式,但你Output的确实字符串,两者矛盾。请首先把这个问题解决掉。两者肯定有一个是不合适的。 --------------------编程问答-------------------- 调试串口时,调试千万别拿鼠标指向Input属性,否则,你就读不到输入。当你用指向Input时,执行了一次读输入缓冲区,按照串口约定,输入缓冲区被读后,就清除! --------------------编程问答-------------------- InputMode选为0的话,书上写的是ComInputModeText,按理说应该是以字符输入哇,为1是ComInputModeBinary.

引用 1 楼  的回复:
首先你的程序上有一个明显的问题,你设置的InputMode是0,也就是二进制方式,但你Output的确实字符串,两者矛盾。请首先把这个问题解决掉。两者肯定有一个是不合适的。
--------------------编程问答-------------------- 那请教您一下,如何才能让缓冲里面的数据还在那儿,能接着在后面的程序中读到值呢?

引用 2 楼  的回复:
调试串口时,调试千万别拿鼠标指向Input属性,否则,你就读不到输入。当你用指向Input时,执行了一次读输入缓冲区,按照串口约定,输入缓冲区被读后,就清除!
--------------------编程问答--------------------
Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
    MSComm1.InputLen = 0
    MSComm1.InputMode = 0
    MSComm1.RThreshold = 1 '返回接收的字符数
    MSComm1.Settings = "9600,e,7,1" '传输格式:9600bps,偶校验,7位数据,1位停止位
    MSComm1.CommPort = 1 '端口选择1
End Sub

Private Sub Command2_Click()
    Dim instring As String
    If MSComm1.PortOpen = False Then
        MSComm1.PortOpen = True
    End If
    MSComm1.Output = Chr(&H2) + "0" + "13E8" + "02" + Chr(&H3) + "76"
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            instring = MSComm1.Input
            Text1.Text = Val(instring)
    End Select
End Sub
--------------------编程问答--------------------
引用 5 楼  的回复:
VB code
Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
    MSComm1.InputLen = 0
    MSComm1.InputMode = 0
    MSComm1.RThresh……


Private Sub MSComm1_OnComm()
    Dim instring As String
    Select Case MSComm1.CommEvent
        Case comEvReceive
            instring = MSComm1.Input
            Text1.Text = Val(instring)
    End Select
End Sub
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,