Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 每次我离开并重新进入类时,Visual Basic都会将变量重置为0_Vb.net_Visual Studio 2012 - Fatal编程技术网

Vb.net 每次我离开并重新进入类时,Visual Basic都会将变量重置为0

Vb.net 每次我离开并重新进入类时,Visual Basic都会将变量重置为0,vb.net,visual-studio-2012,Vb.net,Visual Studio 2012,我有一个表格可以从用户那里获得财务信息,包括贷款金额、利率和期限。我应该叫一个班来做作业,然后把答案返回表格。然而,由于某种原因,每当我的程序移出类,回到窗体,然后回到类,我让类的变量都会重置为0。我的代码如下。任何帮助都会很棒 这是我表格中的代码: 'Preform calculation when button is clicked Private Sub buttonCalc_Click(sender As Object, e As EventArgs) Handles butto

我有一个表格可以从用户那里获得财务信息,包括贷款金额、利率和期限。我应该叫一个班来做作业,然后把答案返回表格。然而,由于某种原因,每当我的程序移出类,回到窗体,然后回到类,我让类的变量都会重置为0。我的代码如下。任何帮助都会很棒

这是我表格中的代码:

    'Preform calculation when button is clicked
Private Sub buttonCalc_Click(sender As Object, e As EventArgs) Handles buttonCalc.Click
    Dim loanAmount As New finClass
    Dim rate As New finClass
    Dim term As New finClass
    Dim payment As New finClass
    loanAmount.getLoanAmount = textBoxMortgageAmount.Text
    rate.getAnnualRate = comboBoxAnnualRate.Text.Replace("%", "")
    term.getTermInYears = comboBoxTerm.SelectedItem
    textBoxMonthlyPayment.Text = payment.setMonthlyPayment

End Sub
以及关联类中的以下代码:

Public Class finClass

Private loanAmt As Decimal
Private termValue As Decimal
Private rateValue As Decimal
Public paymentValue As Decimal

Public WriteOnly Property getLoanAmount
    Set(value)
        If IsNumeric(value) AndAlso value > 1000 AndAlso value < 10000000 Then
            Me.loanAmt = value
        Else
            MessageBox.Show("Mortgage amount must be a number between $1,000 and $10,000,000", "Invalid Number", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Set
End Property

Public WriteOnly Property getAnnualRate
    Set(value)
        rateValue = value.Replace("%", "")
        If rateValue < 1 Then
            rateValue *= 100
        End If

    End Set
End Property

Public WriteOnly Property getTermInYears
    Set(value)
        termValue = value
    End Set
End Property

Public ReadOnly Property setMonthlyPayment
    Get
        Return -Pmt((rateValue / 1200), termValue * 12, Me.loanAmt)
    End Get
End Property
End Class
公共类finClass
以十进制表示的私有loanAmt
专用术语值为十进制
以十进制表示的私人差饷租值
以十进制表示的公共支付值
公共WriteOnly属性getLoanAmount
设置(值)
如果IsNumeric(值)和ALSO值>1000,并且ALSO值<10000000,则
Me.loanAmt=值
其他的
MessageBox.Show(“抵押金额必须是介于$1000和$10000000之间的数字”,“无效数字”,MessageBoxButtons.OK,MessageBoxIcon.Error)
如果结束
端集
端属性
Public WriteOnly Property getAnnualRate
设置(值)
rateValue=值。替换(“%”,“”)
如果rateValue<1,则
差饷租值*=100
如果结束
端集
端属性
公共WriteOnly属性getTermInYears
设置(值)
termValue=值
端集
端属性
公共只读属性setMonthlyPayment
得到
返回-付款((费率值/1200),条款值*12,Me.loanAmt)
结束
端属性
末级

我不在VS中工作,但看起来您正在创建该类的四个实例。我很肯定这是不对的

Private Sub buttonCalc_Click(sender As Object, e As EventArgs) Handles buttonCalc.Click
    Dim loanAmount As New finClass  '## Creates NEW finClass object
    Dim rate As New finClass        '## Creates NEW finClass object
    Dim term As New finClass        '## Creates NEW finClass object
    Dim payment As New finClass     '## Creates NEW finClass object
    loanAmount.getLoanAmount = textBoxMortgageAmount.Text
    rate.getAnnualRate = comboBoxAnnualRate.Text.Replace("%", "")
    term.getTermInYears = comboBoxTerm.SelectedItem
    textBoxMonthlyPayment.Text = payment.setMonthlyPayment

End Sub
因此,这些对象中的每一个都是
finClass
对象的不同的实例。因此,每次“重新输入”该类时,实际上是在输入该类对象的不同instance,这就是为什么所有变量都是value=0。它们还没有被实例化或设置

请改为尝试创建一个类对象,并使用类模块中的方法对其进行操作:

Private Sub buttonCalc_Click(sender As Object, e As EventArgs) Handles buttonCalc.Click
    Dim objFinClass as New finClass

    objFinClass.getLoanAmount = textBoxMortgageAmount.Text
    objFinClass.getAnnualRate = comboBoxAnnualRate.Text.Replace("%", "")
    objFinClass.getTermInYears = comboBoxTerm.SelectedItem
    textBoxMonthlyPayment.Text = objFinClass.setMonthlyPayment

End Sub

创建一个模块并使用“Public”对变量进行尺寸标注 公共模块示例 Public example变量为整数 端模块


这将允许变量在程序运行期间保持其值。在窗体类中使用DIM将导致该值在每次加载表单时被重新定义:

我会考虑将您的<代码> WraveAuth< <代码>属性改为<代码> StRoAnOngs< /Cor>,<代码> StEngUualReals和StEntErthys。还有你的
ReadOnly
属性到
getMonthlyPayment
。我想我说的方式有点混乱。谢谢你的提示。