所以我正在为我的课做一个项目,我们必须写一个班来制作收银机。它是一个带有两个按钮的简单寄存器: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,但这没有什么区别
答案 0 :(得分:1)
reg
变量为Nothing
,因此您无法在其上调用方法。与创建该类型变量时结构存在的结构不同,对于类,您必须明确地对类进行内容。解决此问题的最佳方法是将reg = new CashRegister()
添加到frmRegister_Load
。
这样做的原因是,虽然结构直接存储在变量中,但类是对实例的引用,如果对变量有效则不指向实例,但对于不包含的变量无效东西。
对于结构,内存直接存储在堆栈中,如此
Equations
Amount
Balance
所以变量必须存在,因为它的空间存在。
对于类,变量只包含堆中类的位置,因此您必须使用new创建实例,以便指向变量。
答案 1 :(得分:-1)
看起来您的CashRegister类与包含文本框的表单类不同。如果是这样,那么您需要对表单的引用(您的类的另一个属性,您可以在构造函数中设置)。然后根据需要使用(该引用的名称).txtBalance.Text或(该引用的名称).txtAmount.Text。