Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在带有文本框的类中未处理null引用异常_Vb.net - Fatal编程技术网

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

Vb.net 在带有文本框的类中未处理null引用异常,vb.net,Vb.net,因此,我正在为我的班级做一个项目,我们必须写一个班级来制作一个收银机。它是一个简单的寄存器,有两个按钮:加法和减法。在第一个文本框中键入所需金额,结果显示在第二个文本框中。我从来没有在课堂上工作过,也不懂大部分的行话,所以简单的回答会很好!这是我目前掌握的代码: Public Class frmRegister Dim reg As CashRegister Structure Equations Dim Amount As Double Dim

因此,我正在为我的班级做一个项目,我们必须写一个班级来制作一个收银机。它是一个简单的寄存器,有两个按钮:加法和减法。在第一个文本框中键入所需金额,结果显示在第二个文本框中。我从来没有在课堂上工作过,也不懂大部分的行话,所以简单的回答会很好!这是我目前掌握的代码:

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
公共类frmRegister
现金出纳机
结构方程
金额加倍
双倍暗平衡
端部结构
分级收银机
专用xAmount作为双
私人xBalance作为双
公共财产数额加倍
收到
返回装载
结束
设置(ByVal值为双精度)
xAmount=值
端集
端属性
公共财产余额加倍
收到
返回xBalance
结束
设置(ByVal值为双精度)
xBalance=值
端集
端属性
函数calc_sum()为双精度
Dim add方法为Double
AddMethod=xBalance+xAmount
返回添加方法
端函数
函数calc_sub()为双精度
双精度差分法
减法=xBalance-xAmount
返回减法
端函数
末级
私有子frmRegister_Load(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
如果txtBalance.Text=”“,则
txtBalance.Text=“0”
如果结束
端接头
私有子btnAdd_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnAdd。单击
注册金额=txtAmount.Text
reg.Balance=txtBalance.Text
txtBalance.Text=格式货币(注册计算金额)
端接头
私有子btnSubtract_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnSubtract。Click
注册金额=txtAmount.Text
reg.Balance=txtBalance.Text
txtBalance.Text=FormatCurrency(reg.calc_sub)
如果txtBalance.Text<0,则
MessageBox.Show(“交易不能导致负余额!”)
txtBalance.Text=“0”
如果结束
端接头
末级

当我进入按钮并引用txtboxs时,问题就出现了。他们在txtmount.text下面加下划线,并表示未处理空引用异常。我做错了什么。它怎么是空的?我尝试在前面添加cdbl,但这并没有什么区别

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

变量
reg
Nothing
,因此不能对其调用方法。与结构不同,在结构中,只要创建该类型的变量,结构就存在,而在类中,则必须显式地不满足该类。纠正此问题的最佳方法是将
reg=new cash register()
添加到
frmRegister\u Load

这样做的原因是,当结构直接存储在变量中时,类是对实例的引用,如果变量不指向实例是有效的,但变量不包含某些内容则是无效的

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

Equations
Amount
Balance
因此,变量必须存在,因为它的空间存在


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

这将在编译时标记,而不会生成NullReferenceException这正是我需要的!非常感谢。因此,在主类完成后,您必须在下一节中将其声明为新的,以使其正常工作?我认为您必须使用equations.Amount而不是reg.Amount,或者您可能对equations.Amount和reg.Amount感到困惑,或者您可以使用reg.xAmount而不是reg.Amount