VB.NET通过类似命名的表单控件循环
好吧,我给你的大脑弄了个挠痒的东西。我正在将一个用VB6编写的程序转换为Visual Studio 2010 VB.Net,但遇到了一个问题。我试图在一个表单上循环使用20个表单元素,这些表单元素都有前缀“chkCustomerItems”,然后后面有一个数字1到20。我将其用于数据库查找,这样就有了一个数据库条目,然后将数据库项名称应用于复选框的文本字段并打开可见性。以下是我编写的代码: ConnOpenClose() 当它运行时,我得到一个NullReferenceException错误。这基本上就是我在VB6中使用的代码(对.NET基础结构做了一些更改)。请帮我找出我做错了什么,目前我不得不硬编码所有20项,虽然它工作,但它看起来也不漂亮VB.NET通过类似命名的表单控件循环,vb.net,vb6-migration,Vb.net,Vb6 Migration,好吧,我给你的大脑弄了个挠痒的东西。我正在将一个用VB6编写的程序转换为Visual Studio 2010 VB.Net,但遇到了一个问题。我试图在一个表单上循环使用20个表单元素,这些表单元素都有前缀“chkCustomerItems”,然后后面有一个数字1到20。我将其用于数据库查找,这样就有了一个数据库条目,然后将数据库项名称应用于复选框的文本字段并打开可见性。以下是我编写的代码: ConnOpenClose() 当它运行时,我得到一个NullReferenceException错误。这
提前感谢您您正在使用Text属性,因此我假设这是textbox
试试这个:
DirectCast(Controls(tempString), TextBox).Text = Rs.Fields("Item").Value
如果您的任何控件嵌入到任何容器控件(面板、选项卡等)中,您将无法通过控件集合索引访问它们 相反,您需要使用Controls.Find,并将第二个参数(searchAllChildren)设置为true(我还添加了一些额外的检查和.Net方法):
Do
tempString=“chkCustomerItems”&tempInteger.ToString
将控件设置为控件()
aoControls=Me.Controls.Find(tempString,True)
如果aoControls不是Nothing,也不是aoControls.Length 0,那么
将oTextBox设置为文本框
oTextBox=TryCast(aoControls(0),文本框)
如果oTextBox不是空的,那么
oTextBox.Text=Rs.Fields(“项”).Value
oTextBox.Visible=True
如果结束
如果结束
tempInteger=tempInteger+1
R.MoveNext()
如果tempInteger=21,则
退出Do
如果结束
循环至Rs.EOF
我将此代码完全按照您键入的方式放置到位,但是在oTextBox=TryCast(aoControls,TextBox)行中,我收到了错误消息“无法在aoControls上将“System.Windows.Form.Control的一维数组”类型的值转换为“Ssytem.Windows.Forms.Textbox”。-知道为什么吗?哦,很抱歉。它应该是aoControls(0)
。我已经更新了答案。哇,这正是我想要的!!非常感谢你。我知道在.NET中有一个代码可以做我想做的事情。
DirectCast(Controls(tempString), TextBox).Text = Rs.Fields("Item").Value
Do
tempString = "chkCustomerItems" & tempInteger.ToString
Dim aoControls As Control()
aoControls = Me.Controls.Find(tempString, True)
If aoControls IsNot Nothing AndAlso aoControls.Length <> 0 Then
Dim oTextBox As TextBox
oTextBox = TryCast(aoControls(0), TextBox)
If oTextBox IsNot Nothing Then
oTextBox.Text = Rs.Fields("Item").Value
oTextBox.Visible = True
End If
End If
tempInteger = tempInteger + 1
Rs.MoveNext()
If tempInteger = 21 Then
Exit Do
End If
Loop Until Rs.EOF