null引用异常在带有文本框的类中未处理

时间:2013-05-03 20:52:33

标签: vb.net

所以我正在为我的课做一个项目,我们必须写一个班来制作收银机。它是一个带有两个按钮的简单寄存器:Add和Subtract。您在第一个文本框中键入所需的金额,在第二个文本框中键入结果。我从来没有和班级一起工作,也不理解大多数与它一起使用的术语,所以对于答案来说很棒!这是我到目前为止的代码:

Public Class frmRegister

    Dim reg As CashRegister
    Structure Equations
        Dim Amount As Double
        Dim Balance As Double
    End Structure
    Class CashRegister
        Private xAmount As Double
        Private xBalance As Double

        Public Property Amount As Double
            Get
                Return xAmount
            End Get
            Set(ByVal value As Double)
                xAmount = value
            End Set
        End Property
        Public Property Balance As Double
            Get
                Return xBalance
            End Get
            Set(ByVal value As Double)
                xBalance = value
            End Set
        End Property
        Function calc_sum() As Double
            Dim AddMethod As Double
            AddMethod = xBalance + xAmount
            Return AddMethod
        End Function
        Function calc_sub() As Double
            Dim SubtractMethod As Double
            SubtractMethod = xBalance - xAmount
            Return SubtractMethod
        End Function
    End Class

    Private Sub frmRegister_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If txtBalance.Text = "" Then
            txtBalance.Text = "0"
        End If
    End Sub
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        reg.Amount = txtAmount.Text
        reg.Balance = txtBalance.Text
        txtBalance.Text = FormatCurrency(reg.calc_sum)
    End Sub

    Private Sub btnSubtract_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubtract.Click
        reg.Amount = txtAmount.Text
        reg.Balance = txtBalance.Text
        txtBalance.Text = FormatCurrency(reg.calc_sub)
        If txtBalance.Text < 0 Then
            MessageBox.Show("Transaction Cannot Result in Negative Balance!")
            txtBalance.Text = "0"
        End If

    End Sub

End Class

当我到达按钮并且引用txtbox时出现问题。他们强调txtAmount.text并说空引用异常未处理。我究竟做错了什么。它怎么是空的?我尝试在前面添加cdbl,但这没有什么区别

2 个答案:

答案 0 :(得分:1)

reg变量为Nothing,因此您无法在其上调用方法。与创建该类型变量时结构存在的结构不同,对于类,您必须明确地对类进行内容。解决此问题的最佳方法是将reg = new CashRegister()添加到frmRegister_Load

这样做的原因是,虽然结构直接存储在变量中,但类是对实例的引用,如果对变量有效则不指向实例,但对于不包含的变量无效东西。

对于结构,内存直接存储在堆栈中,如此

Equations
Amount
Balance

所以变量必须存在,因为它的空间存在。

对于类,变量只包含堆中类的位置,因此您必须使用new创建实例,以便指向变量。

答案 1 :(得分:-1)

看起来您的CashRegister类与包含文本框的表单类不同。如果是这样,那么您需要对表单的引用(您的类的另一个属性,您可以在构造函数中设置)。然后根据需要使用(该引用的名称).txtBalance.Text或(该引用的名称).txtAmount.Text。