I am trying to populate drop boxes - vb.net

Here is what I have so far to populate a couple drop down boxes in visual basic.
I may need global variables but I am not sure how to do that. I have been told to use Dim and the variable names of the drop boxes but I keep getting errors saying they are already friends within the form.
*This is a homework assignment, however I am not asking you to do the assignment but simply asking help with the problem I am having within the drop boxes. I don't expect you wonderful people to earn my grades for me! Thank you for any help!
Public Class Form1
'// Mortgage Calculator Assignment 1.
'// Can calculate payments on a given loan at a given rate for a given term.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
'// Inputs rate starting at 3.25% through 6.75% at steps of 0.25% into the drop down box.
Private Sub cbRate_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbRate.SelectedIndexChanged
For i As Decimal = 3.25 To 6.75 Step 0.25
cbRate.Items.Add(i & "%")
Next
End Sub
'// Inputs term in years from 10 through 40 at steps of 5 year intervals into the drop down box.
Private Sub cbTerm_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbTerm.SelectedIndexChanged
For i As Integer = 10 To 40 Step 5
cbTerm.Items.Add(i)
Next
End Sub
End Class

You do not need global variables.
Try just populating the combo boxes in the form load:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'// Inputs rate starting at 3.25% through 6.75% at steps of 0.25%
' into the drop down
For i As Decimal = 3.25 To 6.75 Step 0.25
cbRate.Items.Add(i & "%")
Next
'// Inputs term in years from 10 through 40 at steps of 5 year intervals
' into the drop down box.
For i As Integer = 10 To 40 Step 5
cbTerm.Items.Add(i)
Next
End Sub
Edit: the combo boxes were declared (probably) for you when you added them to the form in the designer.

Related

How to set maximum of two numericupdown control

I was making a cinema booking software where after I choose the seats, it stores the number of seats I selected in an integer counter.
I have two NumericUpDown controls: nudAdult & nudKids
My problem is I have to make sure the maximum value of both NumericUpDown controls can't exceed the seatNum counter.
For eg: If the number of seats I chose is 3, both values of nudAdult & nudKids cannot exceed 3 when added together. So nudAdult can be 2 and nudKids can be 1 and I can't increase anymore than that.
I would appreciate if anyone could help me or give me some pointers to solve this problem.
Thank you for any help.
Edit: This might have been a wrong approach but it worked to an extend
Private Sub nudAdult_ValueChanged(sender As Object, e As EventArgs) Handles nudAdult.ValueChanged
totalCount = Convert.ToInt32(nudAdult.Value) + Convert.ToInt32(nudKids.Value)
Call CheckIfExceed(nudAdult)
End Sub
Private Sub nudKids_ValueChanged(sender As Object, e As EventArgs) Handles nudKids.ValueChanged
totalCount = Convert.ToInt32(nudAdult.Value) + Convert.ToInt32(nudKids.Value)
Call CheckIfExceed(nudKids)
End Sub
Private Sub CheckIfExceed(c As NumericUpDown)
Dim left As Integer
If totalCount <= seatCounter Then
left = seatCounter - totalCount
c.Maximum = totalCount + left
Else
c.Maximum = c.Value - 1
End If
End Sub
You don't have to check anything. As I said, think about a physical problem. Let's say that you have 10 balls and two bags and you can put the balls into the bags. The maximum number of balls you can put in either bag is obviously the number of balls in that bag plus the number of balls not yet in either bag. That means that, when you start and both bags are empty, then maximum for each bag is the total number of balls. BOOM! You now know that you need to set the Maximum of each NumericUpDown to the total number of seats at the start.
Now, when you place a ball in a bag, the maximum number of balls that can be placed in the other bag obviously decrements by one. BOOM! You now know that when the Value of one of your NumericUpDown controls changes, you need to change the Maximum of the other the same amount in the opposite direction.
Look at that! Problem solved with less than a minute considering an analogous physical problem.
Private total As Integer 'Set total here.
Private Sub Start()
NumericUpDown1.Maximum = total
NumericUpDown2.Maximum = total
End Sub
Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
NumericUpDown2.Maximum = total - NumericUpDown1.Value
End Sub
Private Sub NumericUpDown2_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown2.ValueChanged
NumericUpDown1.Maximum = total - NumericUpDown2.Value
End Sub

Visual Basic For Loop how to compare listbox to another listbox?

So im suppose to make a program on VB that records numbers into a list box and find the average, and then i am suppose to compare the previous list box numbers and transfer any number that are above average into the other list-box.
Here is my code so far. I am stuck on the part where I have to transfer the numbers that are above average to another list box.
My logic is [show the count of the numbers, then compare the count of numbers to the average, and any numbers that are greater than the average, ill added onto the new list box] but i dont know how to write the syntax.
Option Strict On
Public Class frmAverageOfScore
Private Sub btnRecord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecord.Click
Dim lblscore As Double
lblscore = CDbl(txtScore.Text)
lstListofScores.Items.Add(lblscore)
End Sub
Private Sub btnAverage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAverage.Click
Dim listScores As Integer = lstListofScores.Items.Count
Dim sum As Double = 0
For average As Integer = 0 To (listScores - 1)
sum += CDbl(lstListofScores.Items(average))
Next
txtAverage.Text = (sum / listScores).ToString("N")
End Sub
End Class
Your existing two routines already provide the foundation for what you need to do. For example, you're already looping through the items in the first list in your averaging routine. Now, just compare each to your average, and populate the second list if they are greater, similar to how you populate the first list.
For i As Integer = 0 To (listScores - 1)
If (CDbl(lstListofScores.Items(i)) > CDbl(txtAverage.Text)) Then
lstListofScores2.Items.Add(lstListofScores.Items(i))
End If
Next
Something to note: There are far more efficient, and readable ways to do this, but I wanted to use code similar to what you've already written. You already know the functionality, you just have to apply it in a slightly different way. Some simple suggestions: store a variable for the average (probably as a Double) so you aren't recalculating it every iteration; use a For Each loop to iterate the Items in the ListBox instead of a For..Next loop, etcetera.

vb.net insert into database from checked list box

I have a checked list box with 6 items . i use the designer to set the binding source to the coulm in my data base named "Gad" the problem is when i select 2 or 3 items from checked list the coulm "gad" on my database get the first selected only .. i want the all selected items saved in this this coulm separated by dashes like item1 - item2 - item 3
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim bob As New System.Text.StringBuilder
For Each item As String In CheckedListBox1.CheckedItems
bob.Append(item)
bob.Append(" - ")
Next
MessageBox.Show(bob.ToString)
End Sub

AddYear does not work when day value is <10

I'm having problems with the following: I have 2 textboxes masked to ShortDate. When I insert a date into the 1st textbox I need the 2nd textbox to display a date 2 years later.
For example, if I put 10/08/2013 the 2nd box should show 10/08/2014.
Here is the code:
Private Sub txtAcquired_LostFocus(sender As Object, e As EventArgs) Handles txtAcquired.LostFocus
Dim Acquired As Date
Acquired = txtAcquired.Text
txtDisposal.Text = Acquired.AddYears(2)
End Sub
It works fine when the day value of the date is > 9 but when I put a date with day value between 1 and 9 it does not work, e.g. if I put 04/04/2011 the 2nd box shows 40/42/013_.
If someone can help on this problem that will be much appreciated.
There is a fault with the date returned. This fixes it.
Private Sub txtAcquired_LostFocus(sender As Object, e As EventArgs) Handles txtAcquired.LostFocus
Dim Acquired As Date
If Date.TryParse(txtAcquired.Text, Acquired) Then
txtDisposal.Text = Acquired.AddYears(2).ToString("MM/dd/yyyy")
End If
End Sub

Get the specific text

I have to get the days between a specific date entered by the user, and the current date in a text box.
So, the simplest code as I think will be as follows:
Private Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged
TextBox1.Text = (DateTimePicker1.Value - Today).ToString
Now, suppose the user selects the date to be 02 March 2013, then the result of this is like 11.12:48:21 but I just want the data to be like 11 i.e without the time.
I tried changing it to Value.Day and Value.DayOfYear, but it does not give the desired output.
I just want to calculate the number of days between today, and the user selected date in a dd or ddd or dddd manner.
Can someone guide me in the right way?
I solved it using this:
TextBox1.Text = (DateTimePicker1.Value.Date - Today.Date).Days
Just one word made so much difference.
Did you mean like
Private Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged
TextBox1.Text = DateTimePicker1.Value.AddDays(-Today.Day).ToString("dd MMM yyy")
End Sub