• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 366
  • Last Modified:

Listbox Value Not Registering for Calculation

I am trying to build a mortgage calculator application with VB and I have list box to select the number of years, but it does not seem to be actually factoring into the solution.  
This is the code:
Private Sub calcbutton_Click(sender As System.Object, e As System.EventArgs) Handles calcbutton.Click
        'The car price should appear in terms of dollars and cents.
        Dim carprice As Double
        'The APR needs two percentage points
        Dim interestrate As Double
        'Money down should be dollars and cents
        Dim moneydown As Double
        'Dim loan term As Double
        Dim loanterm As Double
        'Dim Payment as Double
        Dim payment As Double
        Dim monthlyinterest As Double
        Dim months As Double
        Dim loanamount As Double

        'Declare where the values are coming from
        carprice = Val(Carpricetext.Text)
        interestrate = Val(IRTextbox.Text)
        moneydown = Val(Dwnpymnttext.Text)
        loanterm = Val(LnTrmList.SelectedValue)
        loanamount = (carprice - moneydown)






        Do While loanterm <= 5
            monthlyinterest = (interestrate / 100) / 12
            months = 12 * loanterm

            'calculate payments - rate * month = monthly payments
            payment = _
                Pmt(monthlyinterest, months, -loanamount)


            'displays results
            paymenttxt.Text = payment


        Loop
    End Sub

Open in new window

       loanterm = Val(LnTrmList.SelectedValue) should tell me the value that is selected, but that part of the equation is just coming up zero.  Any ideas on what I did wrong?
0
aclaus225
Asked:
aclaus225
  • 7
  • 6
  • 4
2 Solutions
 
CSIPComputingCommented:
Shouldn't LnTrmList.SelectedValue be LnTrmList.SelectedItem.Value?

I'm not in front of a box with VB on it, but I think that's where you're slightly awry.

Use your trace environment and watches to keep an eye on LnTrnList.SelectedItem.Value to check, or use a MsgBox to display the value...
0
 
aclaus225Author Commented:
MsgBox after the calculation showed that Months was registering as 0.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
You should be using SelectedItem(), not SelectedValue().  Also, you don't need the loop:
        'Declare where the values are coming from
        carprice = Val(Carpricetext.Text)
        interestrate = Val(IRTextbox.Text)
        moneydown = Val(Dwnpymnttext.Text)
        loanterm = Val(LnTrmList.SelectedItem)

        loanamount = (carprice - moneydown)
        monthlyinterest = (interestrate / 100) / 12
        months = 12 * loanterm

        'calculate payments - rate * month = monthly payments
        payment = Pmt(monthlyinterest, months, -loanamount)

        'displays results
        paymenttxt.Text = payment

Open in new window

0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
aclaus225Author Commented:
This is what I have:
        'The car price should appear in terms of dollars and cents.
        Dim carprice As Double
        'The APR needs two percentage points
        Dim interestrate As Double
        'Money down should be dollars and cents
        Dim moneydown As Double
        'Dim loan term As Double
        Dim loanterm As Double
        'Dim Payment as Double
        Dim payment As Double
        Dim monthlyinterest As Double
        Dim months As Double
        Dim loanamount As Double

        'Declare where the values are coming from
        carprice = Val(Carpricetext.Text)
        interestrate = Val(IRTextbox.Text)
        moneydown = Val(Dwnpymnttext.Text)
        loanterm = Val(LnTrmList.SelectedItem)

        loanamount = (carprice - moneydown)
        monthlyinterest = (interestrate / 100) / 12
        months = 12 * loanterm

        'calculate payments - rate * month = monthly payments
        payment = Pmt(monthlyinterest, months, -loanamount)

        'displays results
        paymenttxt.Text = payment
    End Sub

Open in new window


And it still does not seem to do the calculation.  
It will not do the payment = line as "Argument 'NPer' is not a valid value."
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
What kind of values do you have in your ListBox?  I put in years, such as: 3, 4, 5 ,6 , 7, etc...
0
 
aclaus225Author Commented:
The values in the listbox are:
1
2
3
4
5
0
 
CSIPComputingCommented:
NPer is the number of months in the PMT calculation.

If your number of months is still showing as "0" then your calculation won't work.

I get the error "Argument 'NPer' is not a valid value." if I do this calculation:

Payment = Pmt(0.25, 0, 2000)

are you using SelectedItem or SelectedItem.value?  Does it make a difference?
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
After the changes, it worked perfectly for me.  =\

You could also make sure there is an item selected in the ListBox:

    If LnTrmList.SelectedIndex <> -1 Then
        loanterm = Val(LnTrmList.SelectedItem)

        loanamount = (carprice - moneydown)
        monthlyinterest = (interestrate / 100) / 12
        months = 12 * loanterm

        Debug.Print("loanterm = " & loanterm)
        Debug.Print("months = " & months)

        'calculate payments - rate * month = monthly payments
        payment = Pmt(monthlyinterest, months, -loanamount)

        'displays results
        paymenttxt.Text = payment        
    Else
        MessageBox.Show("Please select a Term!")
    End If

With the Debug.Prints() in there, what do you get in the Immediate window?
0
 
aclaus225Author Commented:
Predictably, I get: Please Select a Term.  I have no other code on this form.
This is all the code on this page:

Option Strict On

Public Class childform



    Private Sub calcbutton_Click(sender As System.Object, e As System.EventArgs) Handles calcbutton.Click
        'The car price should appear in terms of dollars and cents.
        Dim carprice As Double
        'The APR needs two percentage points
        Dim interestrate As Double
        'Money down should be dollars and cents
        Dim moneydown As Double
        'Dim loan term As Double
        Dim loanterm As Double
        'Dim Payment as Double
        Dim payment As Double
        Dim monthlyinterest As Double
        Dim months As Double
        Dim loanamount As Double

        'Declare where the values are coming from
        carprice = Val(Carpricetext.Text)
        interestrate = Val(IRTextbox.Text)
        moneydown = Val(Dwnpymnttext.Text)
        loanterm = CDbl(LnTrmList.SelectedItem)

        If LnTrmList.SelectedIndex <> -1 Then
            loanterm = Val(LnTrmList.SelectedItem)

            loanamount = (carprice - moneydown)
            monthlyinterest = (interestrate / 100) / 12
            months = 12 * loanterm

            Debug.Print("loanterm = " & loanterm)
            Debug.Print("months = " & months)

            'calculate payments - rate * month = monthly payments
            payment = Pmt(monthlyinterest, months, -loanamount)

            'displays results
            paymenttxt.Text = CStr(payment)
        Else
            MessageBox.Show("Please select a Term!")
        End If


     
    End Sub

End Class
0
 
CSIPComputingCommented:
I'm now in front of a VB machine as well.

I've recreated the problem quite simply (not bothered naming my textboxes etc).

And this works!

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Payment As Double
        Dim loanamount As Double = (Val(TextBox1.Text) - Val(TextBox3.Text))
        Dim monthlyinterest As Double = (Val(TextBox2.Text) / 100) / 12
        Dim loanterm = Val(ListBox1.SelectedItem)
        Dim months = 12 * loanterm

        'calculate payments - rate * month = monthly payments
        Payment = Pmt(monthlyinterest, months, -loanamount)

        'displays results
        TextBox4.Text = Payment


    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListBox1.Items.Add("1")
        ListBox1.Items.Add("2")
        ListBox1.Items.Add("3")
        ListBox1.Items.Add("4")
        ListBox1.Items.Add("5")

    End Sub

Open in new window

0
 
CSIPComputingCommented:
If you're getting a "Please select a term", something is wrong with your listbox (you knew this though!).

Does your form look like this? Loan Calculator Screen
0
 
aclaus225Author Commented:
CSIP,

The only difference between your form and mine is that the listbox is shrunken to only show one value at a time with an arrow.
0
 
aclaus225Author Commented:
Wow, I hate to admit it, but my mistake with this was simply that I did not select the number (highlight).
0
 
CSIPComputingCommented:
Is your list box set to allow multiple selections?

If so, you need to read the selected values in a different way.

I'll set my box like that and see if it makes a difference.
0
 
CSIPComputingCommented:
Doh!

Glad you got to the bottom of it!
0
 
CSIPComputingCommented:
Fair split.  I'm happy :-)
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Hehe!...did you by chance stay up all night?

Drink some coffee bud.   ;)
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 7
  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now