+ -
当前位置:首页 → 问答吧 → 貌似是类型转换的问题。。

貌似是类型转换的问题。。

时间:2011-12-14

来源:互联网

VB.NET code

  Dim i As Integer
        Dim ns As NetworkStream
        If ListView1.Items.Count = 0 Then
            Timer2.Enabled = False
            Timer1.Enabled = False
            Exit Sub
        End If
        For i = 0 To ListView1.Items.Count
            ns = TClist(ListView1.Items(i).ToString).GetStream()
            
            Else
                ns.Close()
                ListView1.Items.Remove(ListView1.Items(i))
            End If
        Next



想用这段代码实现 自动检测所有添加到LISTVIEW中的客户端是否连接着,没有连接就去除显示
ns = TClist(ListView1.Items(i).ToString).GetStream() 这里的时候类型转换失败
还有If ns.CanWrite Then这句话可以用来检测数据流是否存在吗

作者: HXDSAMA   发布时间: 2011-12-14

CanWrite 是用来判断是否可以写入的。
TClist不知道是什么,但你可以看看其中的参数是什么类型的

作者: bunliney   发布时间: 2011-12-14

引用 1 楼 bunliney 的回复:

CanWrite 是用来判断是否可以写入的。
TClist不知道是什么,但你可以看看其中的参数是什么类型的

Dim TClist As New List(Of TcpClient)
是否可以写入 是不是就能用来判定客户端是否连接啊

作者: HXDSAMA   发布时间: 2011-12-14

ns = TClist(ListView1.Items(i).ToString).GetStream()
=>
ns = TClist(ListView1.Items(i).ToString()).GetStream()

作者: dongxinxi   发布时间: 2011-12-14

TClist 既然是List(Of TcpClient),后面括号中应传入的是Integer类型的索引值,而你传入的是string,当然会类型转换失败了。

如果 CanWrite 为 true,则 NetworkStream 将允许调用 Write 方法。

作者: bunliney   发布时间: 2011-12-14

引用 4 楼 bunliney 的回复:

TClist 既然是List(Of TcpClient),后面括号中应传入的是Integer类型的索引值,而你传入的是string,当然会类型转换失败了。

如果 CanWrite 为 true,则 NetworkStream 将允许调用 Write 方法。

= =你说了一堆错误 那应该怎么解决呢

作者: HXDSAMA   发布时间: 2011-12-14

引用 3 楼 dongxinxi 的回复:

ns = TClist(ListView1.Items(i).ToString).GetStream()
=>
ns = TClist(ListView1.Items(i).ToString()).GetStream()

亲 这样也是错的

作者: HXDSAMA   发布时间: 2011-12-14

引用 5 楼 hxdsama 的回复:

引用 4 楼 bunliney 的回复:

TClist 既然是List(Of TcpClient),后面括号中应传入的是Integer类型的索引值,而你传入的是string,当然会类型转换失败了。

如果 CanWrite 为 true,则 NetworkStream 将允许调用 Write 方法。

= =你说了一堆错误 那应该怎么解决呢

说的很明白了啊,把TClist括号中的换成integer类型的变量啊

作者: bunliney   发布时间: 2011-12-14

你看下TClist()括号里面的参数都可以是哪些类型,
Integer肯定可以,比如TClist(i),string型应该是不可以的
你的参数就是string型

TClist(ListView1.Items(i).ToString())
你想要做的是从TClist()中寻找和ListView1.Items(i)相当的记录吗

作者: bearlin081001   发布时间: 2011-12-14

引用 8 楼 bearlin081001 的回复:

你看下TClist()括号里面的参数都可以是哪些类型,
Integer肯定可以,比如TClist(i),string型应该是不可以的
你的参数就是string型

TClist(ListView1.Items(i).ToString())
你想要做的是从TClist()中寻找和ListView1.Items(i)相当的记录吗

- -嗯 然后进行判定是否连接。。肿么弄呢

作者: HXDSAMA   发布时间: 2011-12-14

用list的Indexof(),得到TClist的索引值,然后把TClist(i)准换赋值
如果Indexof()未找到的话,返回值应该是-1

作者: bearlin081001   发布时间: 2011-12-14

Dim j As Integer
  j=TClist.Indexof(ListView1.Items(i));
  ns = TClist(j).GetStream();
大体就这个意思
 

作者: bearlin081001   发布时间: 2011-12-14

引用 10 楼 bearlin081001 的回复:

用list的Indexof(),得到TClist的索引值,然后把TClist(i)准换赋值
如果Indexof()未找到的话,返回值应该是-1

用过这个办法 可是还是错的 你写一句看看 是不是我什么地方弄错了

作者: HXDSAMA   发布时间: 2011-12-14

j=TClist.Indexof(ListView1.Items(i));
这错吗? 打个断点看下ListView1.Items(i)是什么类型

作者: bearlin081001   发布时间: 2011-12-14

引用 11 楼 bearlin081001 的回复:

Dim j As Integer
j=TClist.Indexof(ListView1.Items(i));
ns = TClist(j).GetStream();
大体就这个意思

类型LISTVIEW的值无法转换为TCPCELIENT的值

作者: HXDSAMA   发布时间: 2011-12-14

TClist中的元素都是tcpclient的,
我们得想办法把ListView1.Items(i)元素转换成tcpclient
查资料中...

作者: bearlin081001   发布时间: 2011-12-14

引用 15 楼 bearlin081001 的回复:

TClist中的元素都是tcpclient的,
我们得想办法把ListView1.Items(i)元素转换成tcpclient
查资料中...

汗 我也在查

作者: HXDSAMA   发布时间: 2011-12-14

TClist(i).tostring()是个什么样子...
实在不行再套个循环...
TClist(i).tostring()和stView1.Items(j).tostring()比较...

作者: bearlin081001   发布时间: 2011-12-14

引用 17 楼 bearlin081001 的回复:

TClist(i).tostring()是个什么样子...
实在不行再套个循环...
TClist(i).tostring()和stView1.Items(j).tostring()比较...

。。。变sting也一样不能换成CLIENT啊

作者: HXDSAMA   发布时间: 2011-12-14

两边都变string比较
如果相等,就取TClist(i)...
绕过转换...

作者: bearlin081001   发布时间: 2011-12-14

引用 19 楼 bearlin081001 的回复:

两边都变string比较
如果相等,就取TClist(i)...
绕过转换...

...我直接用tcpclient来弄了。。现在有办法来判断流是否存在么

作者: HXDSAMA   发布时间: 2011-12-14