1

所以我正在为我的班级做一个项目,我们必须编写一个班级来制作收银机。它是一个带有两个按钮的简单寄存器:加法和减法。您在第一个文本框中输入您想要的金额,结果显示在第二个文本框中。我从来没有在课堂上工作过,也不懂大多数与之相关的术语,所以简单的答案会很棒!这是我到目前为止的代码:

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

当我到达按钮并引用 txtboxes 时,就会出现问题。他们在 txtAmount.text 下划线并说未处理空引用异常。我究竟做错了什么。怎么是空的?我尝试在前面添加 cdbl 但这并没有什么不同

4

2 回答 2

1

reg变量是Nothing因此您不能在其上调用方法。与创建该类型的变量时结构就存在的结构不同,对于类,您必须显式地使类饱和。纠正此问题的最佳方法是添加reg = new CashRegister()frmRegister_Load.

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

对于结构,内存直接存储在堆栈中,如下所示

Equations
Amount
Balance

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

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

于 2013-05-03T21:02:47.770 回答
-1

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

于 2013-05-03T20:56:51.397 回答