VB.NET 泛函数 system.collections.generic.list(of textbox) 的使用问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB.NET 泛函数 system.collections.generic.list(of textbox) 的使用问题!相关的知识,希望对你有一定的参考价值。

有函数如下,
Public Function GetTextboxFromFrm(ByVal frm As Control, ByVal k As Integer) As List(Of TextBox)
Dim obj As Control
Dim listTB As New List(Of TextBox)
For Each obj In frm.Controls
Debug.WriteLine(obj.Name & " " & TypeName(obj))
If TypeOf obj Is TextBox Then
listTB.Add(obj)
Else
If obj.HasChildren Then
listTB.AddRange(GetTextboxFromFrm(obj, k))
End If
End If
Next
Return listTB
End Function

请问如何将listTB中元素的text属性赋值给一个数组呢?为什么下面的方法不行?

Private Sub Gettext(ByVal list As List(Of TextBox), ByVal k As Integer)
Dim cc As String()
Dim i As Integer
For i = 0 To k
cc(i) = list(i).Text
Next
End Sub
运行Gettext函数时,会出现“未将对象引用设置到对象的实例”的错误。

或者可以告诉我在VB.NET中怎么获取一个窗口上所有文本框的text属性,并将其放在一个数组中~感谢!

请高手帮帮忙,感激不尽,这个问题卡住很久了~

Dim cc As String(),这样只是定义了一个数组类型的变量,它的值为Nothing,所以后面会出NullReferenceException。
定义数组要这么定义Dim cc(k) As String

还有你为什么要用参数k呢,可以通过list.Count来获得列表中元素的数量。
Private Function GetText(list As List(Of TextBox)) As String()
If list Is Nothing Then Throw New ArgumentNullException("list")
Dim k As Integer = list.Count - 1
Dim cc(k) As String
For i As Integer = 0 To k
cc(i) = list(i).Text
Next
Return cc
End Function

还有一些其他方法,比如用convertAll
Dim Texts = list.ConvertAll(Function(txt) txt.Text).ToArray
或者LINQ:
Dim ts = (From c In list Select c.Text).ToArray
ConvertAll返回类型就是List(Of T),LINQ返回类型是IEnumerable(OF T)。它们都有ToArray()方法来转化为数组,不过很多时候其实用不着转化成数组。
上面两种语法至少要VS2008才支持
参考技术A 问教授吧~亲

以上是关于VB.NET 泛函数 system.collections.generic.list(of textbox) 的使用问题!的主要内容,如果未能解决你的问题,请参考以下文章

这是引用包含泛型的 C# 接口的 VB.NET 实现的 FxCop 错误吗?

在 vb.net 中使用 MATLAB 函数

未定义的函数'concat' vb.net [重复]

如何将数组变量从 VBA 传递到 vb.net 函数

VB.NET 函数返回

VB.NET的API调用