以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何判定没有串口  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148288)

--  作者:明天的灵
--  发布时间:2020/4/3 21:17:00
--  如何判定没有串口
For Each sp As String In Ports.PortNames
    Output.Show(sp)
Next

以上语句可以输出所有串口名称,但是如果电脑中没有任何串口,sp 就是空的。使用串口前,首先要排除这种情况,
请问有什么语句能判断 第一个"sp" 是空的。
试过  sp  Is Nothing   或  sp = “” 都不行

--  作者:明天的灵
--  发布时间:2020/4/4 11:23:00
--  
换一个思路,当串口为空时,这里的“sp”不知道是何种类型变量?


--  作者:明天的灵
--  发布时间:2020/4/4 22:00:00
--  
For Each sp As String In Ports.PortNames
    MessageBox.Show(sp)
Next

If sp = Nothing Then
    MessageBox.Show("没有串口")
End If

用上述语句,第二段也会出错:
---------------------------
编译错误:未声明名称“sp”。
错误代码:If sp = Nothing Then
---------------------------
确定   



--  作者:明天的灵
--  发布时间:2020/4/4 22:25:00
--  
For Each sp As String In Ports.PortNames
    MessageBox.Show(sp)
    If sp = Nothing Then
        MessageBox.Show("没有串口")
    Else
        MessageBox.Show("有串口")
    End If
Next

测试计算机没有COM 时, 以上代码没有任何输,说明当没有串口时,这个循环没有执行,
这样不知道用什么办法可以检查出没有串口



--  作者:sloyy
--  发布时间:2020/4/4 22:33:00
--  
Dim c1 As String
Dim cms() As String =  {"COM1","COM2","COM3","COM4"}
For Each c As String In cms
    Ports.Add(c)
    For Each sp As String In Ports.PortNames
        If sp =c Then
            c1  =c
            Exit For
        End If
    Next
    If c1 > "" Then Exit For
Next
If c1 > ""
    With Ports(c1)
        .Close()
        .Parity = Parity.None
        .Handshake = Handshake.None
        .StopBits = StopBits.One
        .BaudRate = 2400
        .DataBits = 8
        .ReadBufferSize() = 2048
        .WriteBufferSize() = 2048
        .Open
    End With
else
messagebox.show("没有串口")
End If

--  作者:明天的灵
--  发布时间:2020/4/4 22:50:00
--  
谢谢楼上,上面代码能检查出有没有串口,代码正确