微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何在VB.net中的Soubroutine之外声明对象对象

如何解决我如何在VB.net中的Soubroutine之外声明对象对象

我写了一个代码来演示这个问题:

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数组时,该错误消失。无论如何,我更希望将其声明为外部,因为我在许多函数中都使用了它。我想更好地理解它,因此,如果您为我提供了一个可以阅读的主题,我将不胜感激。非常感谢您的帮助。

解决方法

问题在于声明是在构造函数之前处理的。这意味着该行:

Dim controlArr() As Object = {NumericUpDown1,NumericUpDown2,NumericUpDown3,NumericUpDown4,CheckBox1,CheckBox2,CheckBox3,CheckBox4}

在代码上执行,该代码在窗体上创建所有控件并将它们分配给这些字段。这样,在执行代码时所有字段均为Nothing,因此您的数组中没有完整的内容。创建对象以初始化诸如此类的字段没有问题,并且该代码确实成功创建了一个数组。只是您将该数组的每个元素都隐式设置为Nothing,因此您以后可以使用它。

如果要引用任何控件,则必须等到创建窗体的控件之后。也就是说,最早是在构造函数中调用InitializeComponent之后。一般来说,您应该在Load事件处理程序中执行此操作,例如

Dim controlArr As Object()

Private Sub Form1_Load(sender As Object,e As EventArgs) Handles Form1.Load
    controlArr = {NumericUpDown1,CheckBox4}
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。