提问人:Pepa Zdepa 提问时间:8/20/2020 更新时间:8/20/2020 访问量:29
如何在 VB.net 中声明 soubroutine 之外的对象 arry
How do I declare arry of objects outside a soubroutine in VB.net
问:
我写了一个代码来演示这个问题:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
doSomething()
End Sub
Dim controlArr() As Object = {NumericUpDown1, NumericUpDown2, NumericUpDown3, NumericUpDown4, CheckBox1, CheckBox2, CheckBox3, CheckBox4}
Private Sub doSomething()
Dim testStr As String = ""
For Each control In controlArr
Select Case control.GetType
Case GetType(NumericUpDown)
control.value = 1
Case GetType(CheckBox)
control.checked = True
End Select
Next
End Sub
End Class
当我运行代码时,我收到 Null Referenece 异常“对象引用未设置为对象的实例”,当我在子例程中声明数组时,错误消失。无论如何,我宁愿在外面声明它,因为我在许多函数中使用它。我想更好地理解它,所以如果你为我提供了一个我可以阅读的主题,我将不胜感激。非常感谢您的帮助。controlArr
DoSomething
答:
0赞
jmcilhinney
8/20/2020
#1
问题在于声明是在构造函数之前处理的。这意味着这一行:
Dim controlArr() As Object = {NumericUpDown1, NumericUpDown2, NumericUpDown3, NumericUpDown4, CheckBox1, CheckBox2, CheckBox3, CheckBox4}
在创建窗体上的所有控件并将其分配给这些字段的代码之前执行。因此,所有字段都是在执行代码时,因此您的数组包含一整套 nothin'。创建对象来初始化这样的字段没有问题,并且该代码确实成功创建了一个数组。只是你隐式地将该数组的每个元素都设置为,以便你稍后使用。Nothing
Nothing
如果要引用任何控件,则必须等到创建窗体的控件之后。这意味着,最早,在构造函数中调用 之后。更一般地说,你应该在事件处理程序中执行此操作,例如InitializeComponent
Load
Dim controlArr As Object()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Form1.Load
controlArr = {NumericUpDown1, NumericUpDown2, NumericUpDown3, NumericUpDown4, CheckBox1, CheckBox2, CheckBox3, CheckBox4}
End Sub
评论
0赞
Pepa Zdepa
8/20/2020
非常感谢你,现在我明白了。
评论
Object
Control
Object()